Java NumberFormatException-尝试/捕获解析值
我对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) 拜托,你能告诉我我错过了什么吗?错误消息要求我创建断点。我不明白 先谢谢你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
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();
}