gpt4 book ai didi

oracle - 质数代码 - 请帮我解决这个错误 ('missing if'?)

转载 作者:行者123 更新时间:2023-12-02 05:38:59 24 4
gpt4 key购买 nike

SQL> ed
Wrote file afiedt.buf

1 declare
2 n number;
3 i number;
4 counter number;
5 begin
6 n:=&n;
7 i:=1;
8 counter:=0;
9 if n=1
10 then dbms_output.put_line('1 is a prime No.');
11 else if n=2
12 then dbms_output.put_line('2 is even prime');
13 else
14 for i in 1..n loop
15 if mod(n,i)=0
16 then counter:=counter+1;
17 end if;
18 end loop;
19 end if;
20 if counter=2
21 then dbms_output.put_line(n||' is a prime No.');
22 else
23 dbms_output.put_line(n||' is a not prime No.');
24 end if;
25* end

我收到以下我不明白的错误。谁能解释是什么原因造成的?

SQL> /
Enter value for n: 8
old 6: n:=&n;
new 6: n:=8;
end
*
ERROR at line 25:
ORA-06550: line 25, column 3:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
following:
if

最佳答案

这是因为这个代码段,格式化后让你更好地理解原因:

 9  if n=1
10 | then dbms_output.put_line('1 is a prime No.');
11 else
| if n=2
12 | | then dbms_output.put_line('2 is even prime');
13 | else
14 | | for i in 1..n loop
15 | | | if mod(n,i)=0
16 | | | | then counter:=counter+1;
17 | | | end if;
18 | | end loop;
19 | end if;
?

换句话说,该部分缺少 end if。这就是为什么当您在第 25 行使用 end 完成文件时,它会提示后面没有 if(使 end if) .

只需在第 19 行之后立即敲击 end if 即可解决问题。


这应该可以解决您眼前的问题,但我也有一些简短的评论。

  • 如果您使用 for i in 2..n loop(从 2 而不是 1 开始),并测试 counter 是否大于 1(而不是等于 2 ), 这应该可以节省一些工作。 mod(n,1) 对于 all n 为零。
  • 在任何情况下,原始测试应该是大于 2,而不是等于:数字 12 会给你一个 counter 5(每一个1、2、3、4 和 6) 等将被视为非质数。
  • 为了提高效率,您应该记住,您只需要检查 trunc(sqrt(n))+1(或您使用的任何语言的等效项),因为如果比那个大的数字是一个因素,你会已经找到它的对:12 mod 4 是零,但你已经找到它的对 3(12 mod (12/4) 是零)。
  • 确保 2..n 不包括 n 因为那里的 mod 操作也会增加计数器(我不知道您的特定语言如何处理该循环结构)- 它可能必须是 2..n-1

关于oracle - 质数代码 - 请帮我解决这个错误 ('missing if'?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com