【发布时间】:2019-11-12 10:20:38
【问题描述】:
我在其他项目中也遇到过几次这个问题。现在我试图理解异常处理,但我仍然不知道它是如何工作的。 我试图用循环编写一个计算器,当我尝试输入一个字符串时,会有 InputMismatchException - 我试图捕捉它,但由于某种原因在 catch 子句之后,java 给了我另一个 InputMismatchException,为什么?
import java.util.InputMismatchException;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int loop = 1;
while (loop == 1) {
try {
System.out.println("First number:");
int num1 = scanner.nextInt();
System.out.println("Second number:");
int num2 = scanner.nextInt();
System.out.println("Choose operator (1 for +)(2 for -)(3 for *)(4 for /): ");
int userInput = scanner.nextInt();
switch (userInput) {
case 1:
System.out.println("Result: " + num1 + " + " + num2 + " = " + (num1 + num2));
break;
case 2:
System.out.println("Result: " + num1 + " - " + num2 + " = " + (num1 - num2));
break;
case 3:
System.out.println("Result: " + num1 + " * " + num2 + " = " + (num1 * num2));
break;
case 4:
System.out.println("Result: " + num1 + " / " + num2 + " = " + (num1 / num2));
break;
default:
System.out.println("Invalid Input!");
}
System.out.println("Repeat? (1 = yes)(0 = nein)");
loop = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Invalid Input, try again!");
scanner.nextInt();
}
}
scanner.close();
System.out.println("Ciao!");
}
}
起初有一个无限循环,我在 catch 块中通过scanner.nextInt(); 解决了这个问题,但我仍然收到此错误:
Choose operator (1 for +)(2 for -)(3 for *)(4 for /):
er
Invalid Input, try again!
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Calculator.main(Calculator.java:47)
为什么?
【问题讨论】: