嘿我在学校上课,但是老师没有解释得那么好,所以我们必须在网上查找我做过的信息,但我无法在我的代码中找到错误,你能帮帮我吗? / 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)
答案 0 :(得分:4)
请参阅,您尝试解析 ""
作为 Integer ,它将抛出NumberFormatException
。您必须按此顺序检查null
和isEmpty()
,然后尝试将字符串解析为整数。
答案 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()
所以如果不尝试它我就不能完全确定它的作用。