为什么我不能使用这个循环读取无限双打?

时间:2016-11-11 13:07:14

标签: java double java.util.scanner

我正在尝试从用户那里读取一些数据并用它们做一些非常简单的计算,但由于某些原因我无法解释,程序在前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 个答案:

答案 0 :(得分:4)

考虑这个输入:

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,因此您的程序可能会因初始错误输入而崩溃。