Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我正在尝试从用户那里读取一些数据并对其进行一些非常简单的计算,但是由于某种原因我无法解释,该程序在前2-3次输入后停止(假设它们是双精度的)。有人可以解释这种行为吗?
我的代码:
对于
当对下一个
该字符串不是有效的
解决此问题的一种方法是调用
注意:第一次调用
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我正在尝试从用户那里读取一些数据并对其进行一些非常简单的计算,但是由于某种原因我无法解释,该程序在前2-3次输入后停止(假设它们是双精度的)。有人可以解释这种行为吗?
我的代码:
Scanner in = new Scanner(System.in);
System.out.println("Enter your values, 'q' to quit: ");
double average, input, smallest, largest, range;
average = smallest = largest = range = Double.parseDouble(in.nextLine());
int counter = 1;
while (in.hasNextDouble()) {
input = Double.parseDouble(in.nextLine());
smallest = input < smallest ? input: 0;
largest = input > largest ? input: 0;
average += input;
counter++;
}
最佳答案
考虑以下输入:
1.23
4.56 7.89
对于
Scanner
来说,这看起来像是在两个单独行上的三个double
的有效序列。当您调用nextLine
来获取第一个double
时,它可以正常工作,因为数字占据了整个字符串。当对下一个
double
执行相同操作时,您尝试解析的字符串如下所示:"4.56 7.89"
该字符串不是有效的
double
,因此无法对其进行解析。解决此问题的一种方法是调用
nextDouble
,并避免完全解析。将hasNextDouble()
与nextDouble()
配对具有一个优点,即不需要用户将数据放在不同的行上。注意:第一次调用
Double.parseDouble(in.nextLine())
时,不会检查Scanner
是否具有下一个double
,因此您的程序可能在初始输入错误时崩溃。07-24 18:50