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 вызывает бесконечный цикл?
Проблема заключается в том, что ваше условие - потому что даже если вы достигнете 1, цикл продолжится. Замените while (input >= 1)
с помощью while (input > 1)
Если гипотеза Collatz верна, что цикл всегда достигнет 1 - проблема в том, что вы не прекращаете цикл в 1 :)
Измените while (input >= 1)
на while (input > 1)
.
Это дает бесконечный цикл, потому что input
никогда не может достигнуть нуля или ниже. Нет четного числа >=1
которое при уменьшении пополам дает нуль, а нечетное число >=1
которое при -1
. Поэтому input
всегда будет >=1
и у вас бесконечный цикл.
input == 1
?