2014-11-06 49 views
0

我正在處理一個程序的小問題。除了一小部分,一切都完美無缺。烏蘭姆假設 - 輕微錯誤

public class Prog230b 
{ 
    public static void main (String args[]) 
    { 
     for(int i = 1; i <= 25; i++) // 
     { 
      int num = i; 
      System.out.print("\n" + num + ":"); 
      while(num != 1) 
      { 
       if(num % 2 == 0) 
        num /= 2; 
       else 
        num = 3 * num + 1; 
        System.out.print(EasyFormat.format(num,4,0)); 
      } 
     } 
    } 
} 

EasyFormat只是對外部格式文件的引用。以下是我的輸出。

1: 
2: 1 
3: 10 5 16 8 4 2 1 
4: 2 1 
5: 16 8 4 2 1 
6: 3 10 5 16 8 4 2 1 
7: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
8: 4 2 1 
9: 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
10: 5 16 8 4 2 1 
11: 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
12: 6 3 10 5 16 8 4 2 1 
13: 40 20 10 5 16 8 4 2 1 
14: 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
15: 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 
16: 8 4 2 1 
17: 52 26 13 40 20 10 5 16 8 4 2 1 
18: 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
19: 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
20: 10 5 16 8 4 2 1 
21: 64 32 16 8 4 2 1 
22: 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
23: 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 
24: 12 6 3 10 5 16 8 4 2 1 
25: 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 

的問題是,不打印輸出爲1。我知道這是因爲我有一段時間(NUM!= 1),但我不確定要放什麼東西,而不是說不會導致一個無限循環。

+0

難道你不能在第一個'while循環之外? – JClassic 2014-11-06 04:15:02

+0

你的程序的目的/目的是什麼?你想在這裏做什麼? – jcera 2014-11-06 04:15:13

回答

0

改爲使用do-while循環。這樣,當num開始爲1時,您的代碼至少會執行一次。

 do 
     { 
      if(num % 2 == 0) 
       num /= 2; 
      else 
       num = 3 * num + 1; 
       System.out.print(EasyFormat.format(num,4,0)); 

     } while (num != 1); 
+0

工作完美!謝謝你,朋友。 – Blackout621 2014-11-06 20:53:00