2013-11-01 26 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; 

爲此每一個數字是完美的。