Java Integer.parseInt引发的NumberFormatException

Java Integer.parseInt引发的NumberFormatException,java,numberformatexception,Java,Numberformatexception,嘿,我在学校上编码课,但是老师解释得不好,所以我们必须在网上查找信息,我是这样做的,但是我找不到代码中的错误,你能帮我吗 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 cu

嘿,我在学校上编码课,但是老师解释得不好,所以我们必须在网上查找信息,我是这样做的,但是我找不到代码中的错误,你能帮我吗

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)

您应该将continue语句替换为break。Puting continue将跳过当前迭代,并且不会计算while条件。

请参见,您正在尝试将
解析为一个整数,该整数将抛出
NumberFormatException
。您必须按此顺序检查
null
isEmpty()
,然后尝试将字符串解析为整数。

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

 end = (char) Integer.parseInt(entrada.readLine());
你喜欢这个吗

String input=entrada.readLine();
if(input!=null && !input.equals(""))
{
 end = (char) Integer.parseInt(input);
}
我建议您使用具有实用功能的

Strings.isNullOrEmpty(inputString)//Checks String for both null and empty
更新 正如@ajb所建议的:

如果要将sn转换为字符,则不要使用代码段

而不是解析整数

使用


这并不能达到您认为的效果:

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
,程序将返回,我认为这与您想要的相反


另外,还有其他错误,我没有发现,其他人已经指出;使用
continue
是错误的--使用
break
离开
开关
语句。而使用
System.in.read()
读取一个字符是一个问题,因为用户将键入一个字符,但该字符在用户输入之前不会进入程序,然后
readLine()
将获得第一行的其余部分,而不是要求另一行。但是我通常不使用
System.in.read()
,所以我不太确定这是怎么回事。

你能添加你的错误/警告吗?运行:Tipo de boleto a El boleto cuesta$120.00 Otro boleto(s/n)?线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)java.lang.Integer.parseInt(Integer.java:592)java.lang.Integer.parseInt(Integer.java:615)asjidbhahsjksbd.asjidbhahsjksbd.main(asjidbhahsjksbd.java:16)Java结果:1生成成功(总时间:7秒)@user65185请编辑您的答案,而不是添加到注释中。您的entrada.readLine()有空格“”,因此其引发异常。请使用System.in.readLine()而不是entrada.readLine获取s或n。如果你用break而不是continue,那就好了。@lossmind一些代码会很好,因为OP是新手。你认为他为什么要在要求用户键入“s”或“n”后解析一个整数?@ajb-同意。但这就是他的程序中的缺陷:)。他的错误,那是因为我提到的。@user65185-就像ajb说的,为什么你要读一个字符串,把它解析成一个整数,然后把它转换成一个字符?我只想读这个字符,根据用户说的给出一个答案,然后再问,直到他说不。你认为他为什么要解析一个整数,在要求用户输入“s”或“n”之后?我没有想任何事情,他自己的代码片段中写着他正在试图解析一个整数。异常显示,异常是由于解析一个空白字符串而发生的,如果不翻译他想在这一行中说什么[Otro boleto],我也无法理解,所以忽略了我给出的答案,他试图解析整数,并将整数转换为字符。他的代码片段显然是错的。我也不知道boleto是什么,但我知道síand no是什么意思。这是一个显示用户要求的票款(boleto)成本的程序,然后它再次询问,直到用户说不。你应该在回答中添加一些解释。我发现一个错误,getChar的单词以红色显示。charAt,而不是getChar。很抱歉我需要停止在深夜回答问题。
String answer = entrada.readLine();  
if (answer.isEmpty()) {
    end = 'n';        // treat an empty string like 'n'
} else {
    end = answer.charAt(0);
}