尝试创建一个循环,如果输入的不是1 2 3 4 5或输入不匹配,则会重复。我是一个非常新的尝试者,我的老师说我需要经常使用它们来完成这项作业。我不确定为什么这会无限循环。我已经玩了好几个小时了,我想我拥有的每个不同解决方案都以一个永远循环的循环循环结束。感谢任何可以提供帮助的人。
do {
System.out.printf("Please enter the number corresponding with with what would like to edit: %n1. Title%n2. Author%n3. Location%n4. Book Type%n5. Book Status%n");
try {
x = scan.nextInt();
if (x != 1 && x != 2 && x != 3 && x != 4 && x != 5) {
System.out.println("you must enter either 1 2 3 4 5");
}
} catch (Exception ex) {
System.out.println("you must enter either 1 2 3 4 5");
x = 0;
}
} while (x != 1 && x != 2 && x != 3 && x != 4 && x != 5);
答案 0 :(得分:0)
您需要在此处添加scan.nextLine
} catch (Exception ex) {
System.out.println("you must enter either 1 2 3 4 5");
x = 0;
scan.nextLine(); <----
}
这是因为,如果扫描程序读取的不是整数,它将不会消耗输入,例如documented:
将输入的下一个标记扫描为int。如果下一个标记不能转换为有效的int值,则此方法将引发InputMismatchException,如下所述。 如果翻译成功,扫描程序将前进经过匹配的输入。
因此,下次您调用nextInt
时,扫描程序仍会尝试读取无效的int(它无法完成此操作),从而形成无限循环。
添加nextLine
可确保使用了无效的int。