Ваша проблема в том, что вы не обрабатываете токен конца строки, и поэтому сканер остается висящим. Вы хотите сделать что-то вроде этого:
import java.util.Scanner;
public class Foo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
boolean catcher = false;
do {
try {
System.out.print("Enter a number: ");
a = sc.nextInt();
catcher = true;
} catch (Exception e) {
} finally {
sc.nextLine();
}
}
// !!while(catcher == false);
while (!catcher);
System.out.println("a is: " + a);
}
}
Кроме того, while (z == false) является плохим. Вам намного лучше с (! Z). Это предотвращает ошибку while (z = false), и это более чистый способ выразить это.
редактировать для Марсело:
Марсело, спасибо за ваш вклад и советы! Вы говорите, что условие в блоке if ниже не изменит значение булева, спама?
boolean spam = true;
if (spam = false) {
System.out.println("spam = false");
}
System.out.printf("spam = %b%n", spam);
Потому что, если это изменить, кодер не ожидал, если они предназначены для записи, если (спам == ложь), то может быть тонкие и опасные побочные эффекты от этого. Опять же, спасибо за помощь в разъяснении этого для меня!
Этот код мало смысла. Объявлено не объявлено, и в цикле он не изменяется. Возможно, вы скопировали это неправильно? Для таких проблем всегда лучше размещать небольшую автономную компилируемую программу как можно больше. –
Предполагается, что эта строка должна находиться (z == false); ??? – CoolBeans
Я предполагаю, что да, но даже это плохая форма. Лучше будет while (! Z); –