使用Integer.parseInt时出现Java NumberFormatException

时间:2019-02-22 11:22:17

标签: java if-statement parseint

在我来到这里之前,我已经在整个互联网上真正地寻找了答案,我认为答案与try / catch语句有关,但是即使在观看了有关该主题的一些教程之后,我也不确定如何实现。

无论如何,我正在尝试在我正在制作的新手提醒应用程序中做一件简单的事情(大约3个月以来,我一直在学习Java作为第一语言)。

我希望程序检查用户的输入,并且如果它是某个字母(“ R”),我希望该程序执行某些操作。如果它是从0到100的整数,那么我想做其他事情。如果它们都不是,那么我希望“ else”语句起作用。

当我遇到NumberFormatException错误时,我无法使“ else”语句正常工作的问题。例如,如果我输入其他字母,即“ d”,则会收到以下错误消息:

  

线程“主”中的异常java.lang.NumberFormatException:用于输入   字符串:“ d”   java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)     在java.lang.Integer.parseInt(Integer.java:580)在   java.lang.Integer.parseInt(Integer.java:615)在   mash.Dialogue.startDialogue(Dialogue.java:51)位于   mash.Dialogue.newRem(Dialogue.java:27)在   mash.Dialogue.startDialogue(Dialogue.java:38)在   mash.Main.main(Main.java:9)的mash.Dialogue.start(Dialogue.java:13)

这是代码(对于任何可读性问题,我感到抱歉,这是我第一次向别人展示我的代码)。您不必阅读else if语句,因为问题似乎不取决于该语句中的文本。

如果有人能指出代码的问题以及如何实现我的预期,我将不胜感激。一些对新手友好的解决方案将不胜感激。

提前谢谢!

String secondLetter = mash.nextLine();
           if(secondLetter.equals("r") || secondLetter.equals("R")) {  //if the user enters R - create a new Reminder
             newRem();
    }
           else if((Integer.parseInt(secondLetter) >= 0) && (Integer.parseInt(secondLetter) < maximum)) { //if the user enters number - check task list
               tasks.remText(Integer.parseInt(secondLetter));
               System.out.println("Enter 'D' to set the reminder as Done. Or enter 'T' to return to the list");
               String v = mash.nextLine();
               System.out.println(v);
               if(v.equals("d")|| v.equals("D")) { //if user enters D - set the reminder as done
                   tasks.setDone(Integer.parseInt(secondLetter));
                   System.out.println("The reminder is now added to 'Done' list");
               }
               else if(v.equals("t")|| v.equals("T")) { //if user enters T - return to the list of reminders
                   tasks.display();

               }
               else {

                       System.out.println("Please enter the correct symbol");

               }
           }

           else {     
               System.out.println("Enter the correct symbol");

           }

3 个答案:

答案 0 :(得分:2)

您可以在尝试转换输入之前检查输入的数字是否有效。例如:

if(!secondLetter.matches("[0-9]+")) {
   //it's not a number, so dont attempt to parse it to an int
}

将其放在您的if / else中,如下所示:

if(secondLetter.equals("r") || secondLetter.equals("R")) {
  newRem();
} else if(!secondLetter.matches("[0-9]+")){
  System.out.println("please type r or R or a number");
} else if((Integer.parseInt(secondLetter) >= 0) && ...

答案 1 :(得分:0)

Integer.parseInt将始终抛出异常,如果您尝试将其与非int的东西一起使用。并且“ d”不是int。因此,您应该做的是将其包装在try / catch块中,如果用户输入的内容无效,则提示用户进行其他输入。

答案 2 :(得分:0)

简短回答:docs.oracle.

完整答案: 您只能在可以解析为整数的字符串上使用Integer.parsInt(String s)。字母“ R”不能为数字,因此会产生异常。

if(Character.isLetter(secondLetter) && "R".equalsIgnoreCase(secondLetter)){
   do code with "R"
}else if(Integer.parseInt(secondLetter) > 0 && Integer.parseInt(secondLetter) < 100){
   do code with 0 < number < 100
}else{
   do something else
}