如果for循环的条件高于2,为什么这个循环会无限执行?

时间:2016-05-14 22:54:07

标签: java

public class Proof {
    public static void main(String[] args) {
        for (int x = 1; x < 3; x++) {
            do {
                if (x == 0) {
                    x = x * 3 + 1;
                } else if (x % 2 != 0) {
                    x = x * 3 + 1;
                } else if (x % 2 == 0) {
                    x /= 2;
                }
                System.out.println(x);
            } while (x != 1);

            System.out.println("DONE!!!!!!");
            System.out.println();
        }
    }
}

要测试此问题,只需将x < 3更改为2即可。然后将其更改回3,它不起作用。我只是一个新的程序员,但我对此感到困惑。

3 个答案:

答案 0 :(得分:1)

所以,当x == 1时,你会经历do while循环并最终返回到1,退出然后你将for循环迭代到2 ...当你改变时,它会退出for循环是x&lt; 2。

当x < 3,会发生什么? X像以前一样经历do while循环,但是你不会在2处退出for循环,你实际上会回到do while循环。但什么时候退出do while循环???只有当x == 1 ...那么你的for循环会发生什么?它再次将x迭代到..... 2。而你又回到了你的循环中。永远!

正如Casey所说,调试器会向您展示这一点并且非常有用。祝你好运!

答案 1 :(得分:1)

for循环达到第二次迭代(x = 2)后,您的do while循环会将其重置为1x /= 2 ),并且您的for循环将其递增回2x++),从而使该过程无限重复。

这是一个视觉效果:

Infinite Loop

答案 2 :(得分:0)

  • x最初等于 1
  • 完成第一个else if条件,x增加到 4
  • 此时
  • x!= 1;再次迭代while循环,并经历第二个else if条件。 x除以2,因此等于 2
  • 当等于2时,x%2 == 0为真,x再次除以2,然后下降到 1
  • 当{等于 1 时,while循环退出。
  • 返回for循环,x增加到 2 ,然后返回第二个else if条件。

你回到了第四步,因此在计算中达到一个循环,并且你已经描述了无限循环执行。