Integer.parseInt抛出的NumberFormatException

时间:2015-02-03 05:44:54

标签: java numberformatexception

嘿我在学校上课,但是老师没有解释得那么好,所以我们必须在网上查找我做过的信息,但我无法在我的代码中找到错误,你能帮帮我吗? / p>

char end='s';     
do{
    System.out.println("Tipo de boleto");
    char boleto = (char) System.in.read();
    switch (boleto){
        case 'a':
          System.out.println("El boleto cuesta $120.00");
          System.out.println("Otro boleto (s/n)?");
          end = (char) Integer.parseInt(entrada.readLine());
          continue;
    case 'n':
          System.out.println("El boleto cuesta $75.00");
          System.out.println("Otro boleto (s/n)?");
          end = (char) Integer.parseInt(entrada.readLine());
          continue;
    case 'i':
          System.out.println("El boleto cuesta $60.00");
          System.out.println("Otro boleto (s/n)?");
          end = (char) Integer.parseInt(entrada.readLine());;
          continue;
    default:
          System.out.println("Error" );
          break;
    }
}
  while (end == 'n');

例外

    run: Tipo de boleto a El boleto cuesta $120.00 Otro boleto (s/n)? 

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at 

java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at 

java.lang.Integer.parseInt(Integer.java:615) at 
asjidbhahsjksbd.Asjidbhahsjksbd.main(Asjidbhahsjksbd.java:16) Java Result: 1 

BUILD SUCCESSFUL (total time: 7 seconds)

4 个答案:

答案 0 :(得分:4)

请参阅,您尝试解析 ""作为 Integer ,它将抛出NumberFormatException。您必须按此顺序检查nullisEmpty(),然后尝试将字符串解析为整数。

答案 1 :(得分:0)

你应该用break替换continue语句。 put continue将跳过当前迭代,while条件将不会被评估。

答案 2 :(得分:0)

您在这一行中遇到异常,我认为您从""方法获取readLine() 空白字符串

 end = (char) Integer.parseInt(entrada.readLine());

所以这样做

String input=entrada.readLine();
if(input!=null && !input.equals(""))
{
 end = (char) Integer.parseInt(input);
}

我建议您使用具有效用函数的google guava libraries

Strings.isNullOrEmpty(inputString)//Checks String for both null and empty

<强>更新 正如@ajb建议:

如果您想将 s n 转换为字符而不是使用您的代码段

而不是解析整数

使用

char c=input.charAt(0);

答案 3 :(得分:0)

这不符合你的想法:

end = (char) Integer.parseInt(entrada.readLine());

这一行读取一个字符串。然后它假定字符串是数字,并确定数字。如果用户实际输入"s""n",则会引发异常,因为"s""n"不是数字。然后将该数字视为字符的ASCII值。结果是循环将测试用户是否键入字符串"110",因为110是字符n的ASCII值。

有几种方法可以解决这个问题;这是一个:

end = entrada.readLine().charAt(0);

这将返回用户键入的任何行的第一个字符。这是一个草率的解决方案,因为如果用户在空行上命中ENTER(它将抛出异常),它就不起作用。更好:

String answer = entrada.readLine();  
if (answer.isEmpty()) {
    end = 'n';        // treat an empty string like 'n'
} else {
    end = answer.charAt(0);
}

另外,我认为while可能是错的。 while (end == 'n')表示如果用户输入n,程序将会循环返回,我认为这与您想要的相反。

P.S。还有其他错误,我没有注意到,其他人已经指出;使用continue是错误的 - 使用break离开switch语句。用System.in.read()读取一个字符是个问题,因为用户会输入一个字符,但是在用户输入ENTER之前字符不会进入程序,然后readLine()将获得其余的字符第一行,而不是要求另一行。但是我通常不使用System.in.read()所以如果不尝试它我就不能完全确定它的作用。