我正在尝试验证决定程序是否再次执行所有操作或终止的输入。尽管它足以使Y和N成为唯一可接受的答案,但它实际上并没有命中catch语句-由于while循环,它只循环直到输入Y或N。我需要解决此问题,以便其他任何输入都抛出异常,但是我不明白自己做错了什么。
public static String validateChoice(Scanner sc, String choice) {
choice = "";
while (!choice.equalsIgnoreCase("Y") && !choice.equalsIgnoreCase("N")) {
try {
System.out.print("Continue? Y/N: ");
choice = sc.nextLine();
} catch (InputMismatchException e) {
System.out.println("Invalid answer. Please answer only Y or N. Lowercase is accepted.");
sc.nextLine();
continue;
}
}
return choice;
}
答案 0 :(得分:0)
因为这里没有错误,所以无法到达catch
语句。仅在输入类型不正确时抛出InputMismatchException
。例如,您要求输入nextInt()
,但输入为double
。您正在使用nextLine()
,因此接受所有输入。
答案 1 :(得分:0)
问题是您正在捕获InputMismatchException,而tryMi中的代码永远不会抛出该异常。
System.out.print("Continue? Y/N: ");
choice = sc.nextLine();
查看此:https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#nextLine()
因此,要解决您的问题,请在用户输入Y时继续操作,否则请停止循环播放。依靠价值继续存在并把其他一切都视为“否”是更有意义的。
if(Y){
continue;
} else { //any other value
break;
}
完整代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
do {
System.out.println("Do some stuff");
} while (continueCheck(sc));
System.out.println("Completed");
}
public static boolean continueCheck(Scanner sc) {
System.out.print("Continue? Y/N: ");
String choice = sc.nextLine();
return "Y".equalsIgnoreCase(choice.trim());//true only if Y or y is entered
}