Ulam假设 - 轻微错误

时间:2014-11-06 04:10:41

标签: java

我正在处理一个程序的小问题。除了一小部分外,一切都很完美。

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打印任何内容。我知道这是因为我有while(num!= 1),但我不确定要放什么而不会导致无限循环。

1 个答案:

答案 0 :(得分: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);