嗨,我是Java的初学者,我正在尝试编写这个程序,我可以在其中输入数字,但是当我输入“done”时,我得到了我称为total,numberInputs的值。但是,当我运行它并输入“done”时,我在线程“main”中得到Exception java.lang.NumberFormatException:对于输入字符串:“done”。你知道我怎么解决这个问题吗?
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at repeat.numberReader(repeat.java:15)
at repeat.main(repeat.java:23)
这是我的代码:
import java.util.Scanner;
public class repeat{
public void numberReader(){
Scanner myScanner = new Scanner(System.in);
int total = 1;
int numberInputs = 1;
String userInput;
do {
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
total = total + Integer.parseInt(userInput);
numberInputs++;
} while (!"done".equals(userInput));
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}
public static void main(String[] args){
repeat instance = new repeat();
instance.numberReader();
}
}
感谢您的帮助
答案 0 :(得分:1)
您正在检查userInput
值"done"
,但是在调用Integer.parseInt()
之后这样做了。调用Integer.parseInt("done")
会抛出NumberFormatException,因为字符串"done"
无法解析为整数。
do {
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
***ERROR HERE***
total = total + Integer.parseInt(userInput);
numberInputs++;
} while (!"done".equals(userInput));
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}
您可以通过以下两种方式解决此问题。最简单的方法是重新排序代码,以便在收到代码后立即检查输入,然后再解析它。这确实需要两次提示(一次在循环之前,一次在底部。如果第一个条目是"done"
,这也会有问题,因为do-while
循环总是执行至少一次您可以更改为标准while
循环以避免这种情况。这也不会处理除预期"done"
字符串以外的字符串。
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
do {
total = total + Integer.parseInt(userInput);
numberInputs++;
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
} while (!"done".equals(userInput));
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}
或者,您也可以实现错误处理来捕获和处理异常,但这有点复杂。这听起来像是家庭作业,错误处理可能超出了你的范围,所以我只考虑第一个选项。
作为旁注,您应该考虑将"done".equals(userInput)
更改为userInput.equals("done")
。它们在功能上是相同的,但第二个陈述更清楚你的意图是什么,即userInput
是"done"
。第一个是让自己和其他人更难阅读和理解。
答案 1 :(得分:1)
您的代码存在问题
total = total + Integer.parseInt(userInput);
假设用户输入字符串“done”。
现在你的代码会尝试将字符串解析为整数,即
total=total+Integer.parseInt("done");
因此,会发生NumberFormatException。
正确的代码将是
import java.util.Scanner;
public class repeat{
public void numberReader(){
Scanner myScanner = new Scanner(System.in);
int total = 1;
int numberInputs = 1;
String userInput;
while (true)
{
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
if("done".equals(userInput))
{
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
break;
}
else
{
total = total + Integer.parseInt(userInput);
numberInputs++;
}
}
}
public static void main(String[] args){
repeat instance = new repeat();
instance.numberReader();
}
}
答案 2 :(得分:0)
你需要检查输入是否已完成"在使用Integer.parseInt(userInput)
do {
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
if(!"done".equals(userInput)){
total = total + Integer.parseInt(userInput);
numberInputs++;
}
} while (!"done".equals(userInput));
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}
答案 3 :(得分:0)
正如网站NumberFormatException所示,异常是由于尝试将不表示数字的字符串转换为整数而引起的,在这种情况下:“done”
此行触发了异常:
total = total + Integer.parseInt(userInput);
您可以按照以下方式避免和处理此异常:
public class repeat{
public void numberReader(){
Scanner myScanner = new Scanner(System.in);
int total = 1;
int numberInputs = 1;
String userInput;
boolean done = false; // Stop when true
do {
System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
try{ // Managing the exception
total = total + Integer.parseInt(userInput);
} catch(NumberFormatException e){
if ("done".equals(userInput)){ // it's done!!!!
done = true;
}
}
numberInputs++;
} while (!done);
System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}
public static void main(String[] args){
repeat instance = new repeat();
instance.numberReader();
}
}