为什么这个while循环会导致无限循环?

时间:2014-08-11 08:56:35

标签: java while-loop logic infinite-loop

public void calculate(int input) {

inputField.setText("" + input);

while (input >= 1) {

    if (input % 2 == 0) {
        input = input / 2;
    } else {
        input = (input * 3) + 1;
    }
    output.append("" + input);
    }

}

输出变量是JTextArea,inputField是一个JTextField,用户输入一个整数。

我在这里调用方法并初始化输入变量:

@Override
public void actionPerformed(ActionEvent e) {

    input = Integer.parseInt(inputField.getText());
    calculate(input);

    }

}

每当输入值为偶数时,它除以2,最终应达到1,正确吗?那为什么这个while循环会导致无限循环呢?

3 个答案:

答案 0 :(得分:3)

问题在于你的条件 - 因为即使你达到1,循环也会继续。 将while (input >= 1)替换为while (input > 1)

答案 1 :(得分:0)

这会产生无限循环,因为input永远不会达到零或更低。没有偶数>=1当减半时给出零,而没有奇数>=1当三倍时给出-1。因此,input始终为>=1,您将拥有无限循环。

答案 2 :(得分:0)

如果the Collatz conjecture为真,那么循环将始终达到1 - 问题是您不会在1处停止循环:)

while (input >= 1)更改为while (input > 1)