我在菜单选项中阅读并输入任意数字,但是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”有效!!!
感激地收到任何想法。
西蒙
答案 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()是你的朋友。 原来数字格式异常进一步下降(在'过程中'代码)并没有陷入其中。 这是数据驱动的,所以没有发生在其他机器上。
感谢每一位人士的支持。
西蒙