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循环会导致无限循环呢?
答案 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)
。