2014-10-17 54 views
2

我的任務要求通過嵌套while循環進行命令行輸入以查找數字是否爲開心數字。到目前爲止,我有這樣的:使用java查找開心數字:無限期循環嵌套

int i = 0; 
int sum = 0; 

int dig2, dig1, dig3, dig4, dig1next, dig2next, dig3next; 
int digit1sum, digit2sum, digit3sum; 

happyNumber = number; 

while (i < 500){ 
    while (happyNumber > 0){  
     while (sum!=1){ 
      dig3 = happyNumber/100; 
      dig2 = happyNumber % 10; 
      dig1 = happyNumber/10; 

      dig2next = dig2 % 10; 
      dig1next = dig1 % 10; 
      dig3next = dig3 % 10; 

      digit1sum = dig1next * dig1next; 
      digit2sum = dig2next * dig2next; 
      digit3sum = dig3next * dig3next; 

      sum = digit1sum + digit2sum + digit3sum; 
      happyNumber = sum;   
     } 
     System.out.println("It is a happy number."); 
     System.exit(0); 
    } 
    i++; 
    System.out.println(i); 
    System.exit(0); 
}  

我把我< 500所以當我到達++ 500,循環應停止。我已經儘可能地將i ++放在代碼的每個部分,它永遠不會工作。我在這裏做錯了什麼?

另外:我不允許在此作業中使用for循環或do-while循環。我必須使用嵌套while循環只有

快樂數:用任意正整數開始,將通過其數字的平方和的數量,直到數等於1重複這個過程(在那裏將留下),或者它在一個不包含1的循環中循環不休(循環將持續多長時間:500)。

+2

我建議你快速描述一個「快樂的數字」的定義,因爲至少我不會逆向工程,這顯然不會產生正確的輸出;) – JBA 2014-10-17 14:13:47

+1

我還建議您更清晰地格式化您的代碼,並且添加診斷。如果你的最內層循環*永遠*終止,你將退出應用程序 - 所以外層循環真的不重要。 – 2014-10-17 14:15:50

+0

如果總和永遠不會得到1呢? 我認爲是這種情況.. – 2014-10-17 14:15:58

回答

2

後快速瀏覽一下你的代碼:

while (sum!=1) 
.... 
sum = digit1sum + digit2sum + digit3sum; 
    happyNumber = sum; 

這同時測試很可能是總是正確的 - >無限循環 - >堆棧溢出

0

你將永遠不會離開你的內心while-的如果循環次數無限循環(它絕不會停止在500-限制之內,並且你的邏輯在這裏是錯誤的)。

其次,一些思考:

digit1sum = dig1next*dig1next; 
    digit2sum = dig2next*dig2next; 
    digit3sum = dig3next*dig3next; 

這些(digitxsum)將始終是積極的。因此

sum = digit1sum + digit2sum + digit3sum; 

總和將始終是積極的

happyNumber = sum; 

happynumber總是正

while (happyNumber > 0) 

這是什麼呢?

+0

我不知道,這是我的教授想要的代碼。它似乎是多餘的,我同意。 – 2014-10-17 14:23:45

+0

你告訴使用什麼地方?你可以改變哪些部分? – Plux 2014-10-17 14:32:57