java.lang.NumberFormatException:对于输入字符串:“”使用“2”或“5”时

时间:2013-09-19 09:30:19

标签: java parseint numberformatexception

我在菜单选项中阅读并输入任意数字,但是2& 5工作。

String choice = promptUser(choicePrompt);
try {
      outputInfo(String.format("choice=...%s...",choice));
      int c = Integer.parseInt(choice);
      /* process it */
}catch (NumberFormatException e) {

outputInfo(String.format("choice=%s",choice));
outputInfo(e.toString());
}

public static void outputInfo(String msg)
{
    System.out.printf("\t%s\n",msg);
}

良好的产出:

    Enter Option: 1
    choice=...1...

输出错误:

    Enter Option: 2
    choice=...2...
    choice=2
    java.lang.NumberFormatException: For input string: ""

更新

我硬编码“2”但它仍然失败!:

String choice = promptUser(choicePrompt);
try {
     choice="2";
     outputInfo(String.format("choice=...%s...",choice));
     int c = Integer.parseInt(choice);
     /* process it */
}catch (NumberFormatException e) {

outputInfo(String.format("choice=%s",choice));
outputInfo(e.toString());
}

硬编码“5”也失败但“1”有效!!!

感激地收到任何想法。

西蒙

3 个答案:

答案 0 :(得分:1)

如果我假设您的promptUser()方法类似于:

static String promptUser() {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    try {
        return reader.readLine();
    }
    catch(Exception ex) {
        return null;
    }
}

(没有参数)然后程序按预期运行 - 当然代码中没有任何东西可以区别对待2或5。如果你得到一个空字符串,那么你确定你的提示用户方法是否正常工作?

无论哪种方式,您在此处发布的代码基本上都是正确的。我会想象你的更全面的程序还有其他错误,当你把它减少到这里时它就不会表现出来;也许你正在遇到局部变量隐藏字段的情况,例如你并没有使用你认为的那个值(但此时,我只是在猜测。)

答案 1 :(得分:0)

<强>更新

似乎promptUser方法返回一个空字符串“”。在调用之前检查选项是否为空 ParseInt方法

您还可以添加trim()以消除输入前后的空格

  if(choice!=null && !"".equals(choice))
     int c = Integer.parseInt(choice.trim());

答案 2 :(得分:0)

printStackTrace()是你的朋友。 原来数字格式异常进一步下降(在'过程中'代码)并没有陷入其中。 这是数据驱动的,所以没有发生在其他机器上。

感谢每一位人士的支持。

西蒙