2013-11-01 20 views
0

我写了一个完美的数字程序,但是当我运行它时,它输出每个数字都是完美的。请帮我找到我的错误。这个完美的数字代码有什么问题?

这是我的服务器代码:

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

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

+1

+1好点... – Reimeus

+0

谢谢大家^^我已经解决了这个问题。 – user2817151

+1

@ user2817151别忘了[接受答案](http://meta.stackexchange.com/a/65088/155831) – Reimeus

2

我觉得你的问题是在这里:

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

你或许应该使用,而不是与初始化为零的新变量遮蔽它的对象的字段number

+0

谢谢大家^^我已经解决了这个问题。 – user2817151

1

int number = 0;里面的isPerfect功能是你麻烦的原因。

0

你有

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

测试对于

while (1 < 0) 

所以循环永远不会运行。接下来,您必须

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

测试对于

if (0 == 0) 
    return true; 

为此每一个数字是完美的。