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所建议的:
如果要将s和n转换为字符,则不要使用代码段
而不是解析整数
使用
这并不能达到您认为的效果:
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);
}