Java NumberFormatException-尝试/捕获解析值

Java NumberFormatException-尝试/捕获解析值,java,exception,try-catch,Java,Exception,Try Catch,我对Java和编程非常陌生。我正在做一个练习来打印一个乘法标签。我想检查用户选择。我一直在寻找以前的不同帖子,这些帖子对我的进一步发展有很大帮助。但是,当我测试程序时,它会抛出异常: 线程“main”java.lang.NumberFormatException中的异常:用于输入 字符串:“p”位于 forInputString(NumberFormatException.java:65) 位于java.lang.Integer.parseInt(Integer.java:580) java.l

我对Java和编程非常陌生。我正在做一个练习来打印一个乘法标签。我想检查用户选择。我一直在寻找以前的不同帖子,这些帖子对我的进一步发展有很大帮助。但是,当我测试程序时,它会抛出异常:

线程“main”java.lang.NumberFormatException中的异常:用于输入 字符串:“p”位于 forInputString(NumberFormatException.java:65) 位于java.lang.Integer.parseInt(Integer.java:580) java.lang.Integer.parseInt(Integer.java:615)位于 main(TableMultiplication.java:18)

拜托,你能告诉我我错过了什么吗?错误消息要求我创建断点。我不明白

先谢谢你

import java.util.Scanner;
import java.util.InputMismatchException;

public class TableMultiplication {
    public static void main(String[] args)
    {
        int table = -1;
        boolean wrongSelection = true;
        Scanner myObj = new Scanner(System.in);

        System.out.println("Multiplication tab will be shown to console ");

        do{
            System.out.print("Enter the tab number you want, between 1 and 9 ");
            while (wrongSelection) {
                try {
                    String value = myObj.nextLine();
                    table = Integer.parseInt(value);
                    wrongSelection = false;
                }
                catch(InputMismatchException e){
                    System.out.println("Please, enter a number ");
                    myObj.nextLine();
                }
            }
        } while(table < 1 || table > 9);

        for(int i = 1; i < 11; i++) {
            System.out.println(table + " x " + i + " = " + table * i);
        }

    }
}
import java.util.Scanner;
导入java.util.InputMismatchException;
公共类表乘法{
公共静态void main(字符串[]args)
{
int表=-1;
布尔错误选择=真;
扫描仪myObj=新扫描仪(System.in);
System.out.println(“将向控制台显示乘法选项卡”);
做{
System.out.print(“输入所需的标签号,介于1和9之间”);
while(错误选择){
试一试{
字符串值=myObj.nextLine();
table=Integer.parseInt(值);
错误选择=错误;
}
捕获(输入不匹配异常e){
System.out.println(“请输入一个数字”);
myObj.nextLine();
}
}
}而(表<1 | |表>9);
对于(int i=1;i<11;i++){
System.out.println(表+“x”+i+“=”+表*i);
}
}
}

您正在捕获
输入不匹配异常
但键入字母而不是数字会引发
数字格式异常

您可以使用通用的
catch
异常:

试试看{
}

catch(异常e){/如果您试图输入一个非数字的字符串值,您将得到NumberFormatException异常。在您的情况下,该异常意味着您输入一个不能解析为整数值的字符“p”。如果您输入“1”、“32”和“您想要输入的数字”,则将传递该字符。
有一个catch块,它只捕获InputMismatchException,但不能捕获其他异常。您还可以将InputMismatchException更改为Exception,它是捕获其他异常(如NumberFormatException或其他异常)的父级。

好像您输入了“p”作为您的输入。即使您使用了try-catch块,您也没有包含当输入字符串无法解析为整数时实际引发的异常-
NumberFormatException
。因此您没有捕获此异常。正如我所看到的,您甚至没有抛出
inputmaschException
,为什么要在这里捕获它?他说llo@maloomeister我输入了“p”来测试我的程序。我想看看当出现异常时它是如何工作的。正如我所写的,我是一个非常初学者(两周前开始使用Java)。令人难以置信的是,人们是如何否决初学者提出的问题的。初学者提出的问题并不意味着以前没有做过深入的研究。不用担心,但不要否决你的问题。对于未来,请查看参考资料,因为它们将始终为你提供最有用的信息。是的,确实如此。例如,我在通讯中提到的链接nts为您提供所需的所有信息。非常感谢您的帮助。当我在互联网上阅读时,我认为InputMismatchExcept正在检查输入。我将了解两者之间的差异。再次感谢@J.F。不客气。我已更新了答案来解释这一点,希望能有所帮助。非常感谢@Baungo。如果我在如果我只编写异常,它将适用于所有特定的异常?是的,因为所有异常都继承自异常,所以您总是可以捕获异常。但这也是您应该尽可能避免它的原因,因为它可能会隐藏您不期望的其他异常。例如myObj.nextLine()在本例中可能会引发NullPointerException,您不会注意到并假设整数解析中出现异常。在这种情况下,最好像这样捕获两个异常:catch(NumberFormatException | InputMismatchException e)
try {
                String value = myObj.nextLine();
                table = Integer.parseInt(value);
                wrongSelection = false;
            }
            catch(Exception e){
                System.out.println("Please, enter a number ");
                myObj.nextLine();
            }