[英]Resume loop after caught exception
我在主方法中捕获了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();
}
}
您留下的menuNumber
等于4,这是循环的终止条件。 当然,您的循环将结束。
您已将menuNumber初始化为4,但是在发生异常的情况下请勿将其更改。 该循环确实尝试继续,但是由于语句menuNumber != 4
为false而退出。
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);
尝试这个
} catch (InputMismatchException ime) {
if (fatal(ime)) {
throw ime;
} else {
// try again
continue;
}
该循环不会继续,因为抛出了InputMistmatchException以外的OTHER类型的异常。 将捕获更改为:
catch (Exception e)
或至少加上所有涵盖的捕获条件。
更好的解决方案是准确检查引发了什么异常及其原因,然后解决导致异常的问题。 从理论上讲,使用continue语句包含所有包含的内容可能会导致无限循环,因为menuNumber不会增加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.