Java 捕获输入不匹配异常不';I don’我不回信
所以我在做这个学校作业,基本上需要确保用户输入一个有效的选项(1、2或3) 我应该使用很多开关,但这是我制作的:Java 捕获输入不匹配异常不';I don’我不回信,java,exception,try-catch,Java,Exception,Try Catch,所以我在做这个学校作业,基本上需要确保用户输入一个有效的选项(1、2或3) 我应该使用很多开关,但这是我制作的: private void choice() { try { Scanner s = new Scanner(System.in); int option = s.nextInt(); if (option == 1) { start(); } if (option == 2
private void choice() {
try {
Scanner s = new Scanner(System.in);
int option = s.nextInt();
if (option == 1) {
start();
}
if (option == 2) {
info();
}
if (option == 3) {
System.exit(0);
}
throw new InputMismatchException("Enter valid input");
} catch (InputMismatchException e) {
System.out.println(e.getMessage());
}
}
如果您在控制台中输入一个数字,它将返回我的消息,如果您输入任何其他内容,它将返回“null”。为什么呢?因为如果我删除异常并查看stacktrace(例如,当输入字母时),它会显示InputMismatchException
提前谢谢
public void choice() throws InputMismatchException {
Scanner s = new Scanner(System.in);
int option = 0;
try {
option = s.nextInt();
} catch (InputMismatchException e) {
throw new InputMismatchException("Enter valid input");
}
if (option == 1) {
System.out.println("e");
} else if (option == 2) {
System.out.println("f");
} else if (option == 3) {
System.exit(0);
} else {
throw new InputMismatchException("Enter valid input");
}
}
public static void main(String[] args) {
try {
new Test().choice();
} catch (InputMismatchException e) {
System.out.println(e.getMessage());
}
}
将int选项放在try中。完成。请发布堆栈跟踪。确保引发另一个异常,而不是inputMismatch。查看堆栈跟踪。它是来自InputMismatchException吗?Catch(InputMismatchException e)下面的Catch Throwable(不要在生产代码中执行此操作)并只打印消息。它适用于数字,但如果我键入字母,则只会得到“null”。我以为我捕获了异常?问题是您的代码是option从未到达else语句。请参阅编辑。我编辑了问题,重新制作了选项拾取,现在应该可以到达了吗?scanner.nextInt()方法读取一个int。如果没有找到int,它将引发异常,并且永远不会到达if语句,因此您需要在输入期间处理异常,并将其传递给进行调用的方法。在本例中,main进行了调用,因此main处理异常并打印消息。