我在main方法中捕获inputMismatchException,并希望我的do-while循环在捕获异常后再次迭代。我甚至编写了一个明确的继续声明,但这不起作用。我怎么能这样做?
public class AddressBookApp {
public static void main(String[] args) {
AddressBook abook = new AddressBook();
System.out.println("Welcome to the Address Book Application\n");
Scanner sc = new Scanner(System.in);
int menuNumber = 4;
loop:
do {
abook.menu();
try{
menuNumber = sc.nextInt();
System.out.println();
if (menuNumber < 1 || menuNumber > 4){
System.out.println("Please enter a valid menu number\n");
} else if (menuNumber == 1) {
abook.printEntries();
} else if (menuNumber == 2) {
abook.addEntry();
} else if (menuNumber == 3) {
abook.removeEntry();
} else {
System.out.println("Thanks! Goodbye.");
sc.close();
return;
}
} catch (InputMismatchException ime) {
System.out.println("Please enter an integer");
sc.next();
continue loop;
}
} while (menuNumber != 4);
sc.close();
}
}
答案 0 :(得分:4)
您将menuNumber
等于4,这是循环的终止条件。当然你的循环会结束。
答案 1 :(得分:1)
您将menuNumber初始化为4,但在发生异常时不要更改它。循环确实尝试继续,但退出是因为语句menuNumber != 4
为假。
int menuNumber = 4;
loop:
do {
abook.menu();
try{
menuNumber = sc.nextInt();
System.out.println();
if (menuNumber < 1 || menuNumber > 4){
System.out.println("Please enter a valid menu number\n");
} else if (menuNumber == 1) {
abook.printEntries();
} else if (menuNumber == 2) {
abook.addEntry();
} else if (menuNumber == 3) {
abook.removeEntry();
} else {
System.out.println("Thanks! Goodbye.");
sc.close();
return;
}
} catch (InputMismatchException ime) {
System.out.println("Please enter an integer");
sc.next();
continue loop;
}
} while (menuNumber != 4);
答案 2 :(得分:0)
试试这个
} catch (InputMismatchException ime) {
if (fatal(ime)) {
throw ime;
} else {
// try again
continue;
}
答案 3 :(得分:0)
循环不会继续,因为抛出了一个类型为OTHER而不是InputMistmatchException的异常。将捕获更改为:
catch (Exception e)
或至少添加所有包含捕获条件。
更好的解决方案是准确检查抛出的异常和原因,然后解决导致异常的问题。从理论上讲,拥有一个包含continue语句的全包,可能会导致无限循环,因为menuNumber不会递增。