编写一个程序来测试数字是否为黄金或完美

时间:2014-11-16 06:20:24

标签: java

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.

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

你得到这个是因为c1在你的第一个循环中变为2并且从那里开始增加。你永远不会有c小于1的情况。

重新考虑如果数字是否为素数,您的跟踪方式。

答案 1 :(得分:0)

我建议你的真正问题不是手头的域名问题,而是缺乏对如何辨别代码实际执行情况的理解。如果你查看输出,你就不会去任何地方,看看它是不正确的,直接去Stackoverflow寻求帮助。

一些建议。

  1. 将System.out.println调用添加到您的代码中,以便您可以观察它的执行情况。这是&#34; logging&#34;的一种原始形式,如果没有像log4j这样的完整框架,它就可以开始了。

  2. 打开调试器。您的jgrasp IDE内置了一个调试器,以便您可以在执行时查看代码值。 http://www.jgrasp.org/tutorials187/06_Debugger.pdf

  3. 写出一个应该是素数的示例数字,然后用铅笔和纸张在代码中查找以找到解决方案。

答案 2 :(得分:0)

  

有什么建议吗?

是的。检查素数的定义......并将其与内循环实际执行的内容进行比较。

如果这还不够,请问自己N % 1的价值是什么,对于大于或等于零的任何N

答案 3 :(得分:0)

问题源于'c1'永远不会是'c1 == 1'或'c1 == n'。你似乎忘了将第二个循环包在括号中。这可能是问题所在,因为您在检查之前尝试增加'c1'n次。

然后尝试'println(c1)'以查看循环过程中发生了什么。