public class assignmentno7
{
public static void main(String[] args)
{
long i,c1=1,n;
for(n=1;n<20;n++)
{
for(i=1;i<(n+1);i++)
if(n%i==0)
c1+=i;
if(c1==1)
System.out.println(n+"is prime");
else if(c1==n)
System.out.println(n+"is perfect");
else
System.out.println(n+"its a regular number");
}
}
}
我想编写一个程序来测试数字是否为完美或完美 我没有错误是我的程序 但我没有得到正确的解决方案
这是我的输出:
----jGRASP exec: java assignmentno7
1its a regular number
2its a regular number
3its a regular number
4its a regular number
5its a regular number
6its a regular number
7its a regular number
8its a regular number
9its a regular number
10its a regular number
11its a regular number
12its a regular number
13its a regular number
14its a regular number
15its a regular number
16its a regular number
17its a regular number
18its a regular number
19its a regular number
----jGRASP: operation complete.
有什么建议吗?
答案 0 :(得分:0)
你得到这个是因为c1在你的第一个循环中变为2并且从那里开始增加。你永远不会有c小于1的情况。
重新考虑如果数字是否为素数,您的跟踪方式。
答案 1 :(得分:0)
我建议你的真正问题不是手头的域名问题,而是缺乏对如何辨别代码实际执行情况的理解。如果你查看输出,你就不会去任何地方,看看它是不正确的,直接去Stackoverflow寻求帮助。
一些建议。
将System.out.println调用添加到您的代码中,以便您可以观察它的执行情况。这是&#34; logging&#34;的一种原始形式,如果没有像log4j这样的完整框架,它就可以开始了。
打开调试器。您的jgrasp IDE内置了一个调试器,以便您可以在执行时查看代码值。 http://www.jgrasp.org/tutorials187/06_Debugger.pdf
写出一个应该是素数的示例数字,然后用铅笔和纸张在代码中查找以找到解决方案。
答案 2 :(得分:0)
有什么建议吗?
是的。检查素数的定义......并将其与内循环实际执行的内容进行比较。
如果这还不够,请问自己N % 1
的价值是什么,对于大于或等于零的任何N
。
答案 3 :(得分:0)
问题源于'c1'永远不会是'c1 == 1'或'c1 == n'。你似乎忘了将第二个循环包在括号中。这可能是问题所在,因为您在检查之前尝试增加'c1'n次。
然后尝试'println(c1)'以查看循环过程中发生了什么。