这个完美的数字代码有什么问题?

时间:2013-11-01 00:07:55

标签: java perfect-numbers

我写了一个完美的数字程序,但是当我运行它时,输出每个数字都是完美的。请帮我找错。

这是我的服务器代码:

public class Perfect
{
   private int number;

    public Perfect()
    {
        number = 0;
    }

    public Perfect(int num)
    {
        number = num;
    }

    public void setPerfect(int num)
    {
        number = num;
    }

    public boolean isPerfect()
    {
        int number = 0;
        int div = 0;
        int num = 1;
        while (num < number)
        {
            if (number % num == 0)
            {
                div += num;
            }
            num++;
        }

        if ( div == number)
            return true;

        else    
            return false;
    }

   public String toString()
    {
        if (isPerfect() == true)
          return number + " is perfect";
        else
          return number + " is not perfect";
    }
}

我得到的输出是我输入的每个数字都是完美的。

4 个答案:

答案 0 :(得分:4)

isPerfect中您定义了一个局部变量number = 0。这是测试的值而不是字段number。局部变量隐藏了类字段。

答案 1 :(得分:2)

我认为你的问题在这里:

public boolean isPerfect() {
    int number = 0;
    ...

您可能应该使用对象的字段number,而不是使用初始化为零的新变量对其进行遮蔽。

答案 2 :(得分:1)

int number = 0;功能中的isPerfect行是您遇到麻烦的原因。

答案 3 :(得分:0)

你有

int number = 0;
int num = 1;
while (num < number)
{
...
}

测试

while (1 < 0)

所以循环永远不会运行。接下来你有

int div = 0;
if ( div == number)

测试

if (0 == 0)
    return true;

因此,每个数字都是完美的。