嗨,我是Java的初学者,我正在尝试编写这个程序,我可以在其中输入数字,但是当我输入“完成”时,我得到了我称为总计的值,numberInput。但是,当我运行它并输入“完成”时,我在线程“main”java.lang.NumberFormatException中得到异常:对于输入字符串:“完成”。你知道我如何修复这个问题吗?
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();
}
}
谢谢你的帮助
您正在检查用户输入的值是否为“已完成”,但在调用Integer之后进行检查。parseInt()。调用整数。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));
}
您可以通过几种方法解决此问题。最简单的方法是对代码进行重新排序,以便在收到输入后立即检查输入,并且只在收到输入后进行解析。但这确实需要有两次提示(一次在循环之前,一次在循环底部)。如果第一个条目是“完成”,这也会有问题,因为循环始终至少执行一次,而循环总是执行一次。您可以更改为标准的“完成”。这也不会处理预期的“完成”字符串以外的字符串。
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));
}
或者,您也可以实现错误处理来捕获和处理异常,但这要复杂一些。这听起来像是家庭作业,错误处理可能超出了您的范围,所以我只考虑第一个选项。
作为补充说明,您应该考虑更改“完成”。等于(userInput)到userInput。等于(“完成”)
。它们在功能上是相同的,但是第二条语句更清楚您的意图是什么,即查看用户输入是否是“完成的”。第一个问题对你自己和其他人来说都很难阅读和理解。
你的代码的问题在这一行
total = total + Integer.parseInt(userInput);
假设用户输入字符串“完成”。
现在,您的代码将尝试将字符串解析为整数,即。
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();
}
}
如网站: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();
}
}
阅读更多关于try/catch的信息
你好,我有以下问题 查询在我的localhost(XAMMP)中运行良好,但在其他任何地方它都会给我这个错误 示例:http://sqlfiddle.com/#!9/e19e8c/2
我试图在Netbeans中运行这段简单的代码,并以某种方式不断得到一个“else-without-if”错误。 我也在Eclips中运行了这个,在那里我得到了一条评论,其他的应该转换成一段时间,这让我更加困惑。我已经做了一些这样的例子,它们很有效。 我还省略了if语句末尾的分号,但它不起作用。
在我的代码中 当我运行程序时,它抛出一个数字格式异常 我做错了什么?这似乎相对简单,但不起作用。
问题内容: 运行Java程序时出现错误。有什么问题,我该如何解决? 问题答案: 没有更多的信息,很难找出问题所在,但根本原因是,您可能是针对缺少该方法的该类的另一个版本编译了一个类,而不是运行该类时所使用的方法。 查看堆栈跟踪…如果在库中的对象上调用方法时出现异常,则很可能在编译和运行时使用库的不同版本。确保两个地方的版本都正确。 如果在调用由类实例化对象的方法,当出现异常你做,那么你的构建过程似
异常在线程"main"java.lang.IndexOutOfBoundsExc0019:索引: 0,大小: 0在java.util.ArrayList.range检查(ArrayList.java:604) 符合arraylist.java 一致 请帮帮忙