在第一次尝试中,它的工作原理完全符合我的需要,但在其他两个中,它们没有,我不知道为什么。
First One:它要求输入难度1 - 3,如果不是1、2或3,它循环直到他们输入1、2或3,如果他们输入的不是int,它会显示"无效难度"并要求他们再次输入。
Issue: None (that I know of)
try {
System.out.println("What would you like the difficulty to be?");
System.out.println("Easy = 1, Medium = 2, Hard = 3");
difficulty = userInput.nextInt();
while((difficulty < 1 || difficulty > 3)){
System.out.println("Invalid Difficulty. n");
difficulty = userInput.nextInt();
}
} catch(InputMismatchException exception) {
System.out.println("Invalid Difficulty.n");
difficulty = selctDifficulty();
}
第二个:应该做同样的事情,只是没有循环,以确保它落在两个数字之间。
问题:如果他们没有输入int,它会显示无效的数量,然后崩溃
Exception in thread "main" java.util.InputMismatchException
try {
System.out.println("How many pitchers would you like to buy?");
amountOfPitchers = userInput.nextInt();
} catch(InputMismatchException exception) {
System.out.println("Invalid Amount.n");
amountOfPitchers = userInput.nextInt();
}
第三个:应该和第一个完全一样。
问题:如果我输入一个字符串,它会崩溃
Exception in thread "main" java.util.InputMismatchException
try {
System.out.println("How much do you want to charge per cup?");
System.out.println("Between $0.05 and $2.00");
pricePerCup = userInput.nextDouble();
while((pricePerCup < 0.05 || pricePerCup > 2.00)){
System.out.println("Invalid Amount. n");
pricePerCup = userInput.nextDouble();
}
} catch(InputMismatchException exception) {
System.out.println("Invalid Amount.n");
pricePerCup = userInput.nextDouble();
}
你的错误行清楚地告诉你错误是什么和在哪里:
线程"main"中的异常java.util.InputMismatchException
在你的第二个和第三个例子的catch子句中有些东西给你错误,但不是第一个。你知道为什么吗?
通过简单的检查,对于您的第二次和第三次尝试和捕获,在由于无效输入而发生异常之后,您仍然试图使用userInput.nextInt()和userInput.nextDouble()处理输入。由此引起的异常不会被捕获,因此会引起问题。
您需要在catch中执行userInput.next()以便移动到下一个输入
第一个在catch块中似乎是递归的,第三个不是…
System.out.println("Invalid Amount: " + userInput.next()); // <-- read the non-double.
// pricePerCup = userInput.nextDouble();
pricePerCup = selectPricePerCup();
因为你在catch中做pricePerCup = userInput.nextDouble();
?
如果你抓住它,为什么你试图处理输入再次当它不是有效的输入?阅读异常和catch块真正做什么