java - 为什么我不能使用这个循环无限读取 double ?

标签 java double java.util.scanner

我试图从用户那里读取一些数据并用它们做一些非常简单的计算,但由于某种原因我无法解释,程序在前 2-3 个输入后停止(假设它们是 double )。有人可以解释这种行为吗?

我的代码:

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

关于java - 为什么我不能使用这个循环无限读取 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40548713/

相关文章:

java - 什么时候需要重新编译 GWT widgetSet?

ios - Swift - 从 Double 中删除尾随零

objective-c - 将字符串转换为 double 以供坐标使用,Xcode

java - 扫描仪跳过文本文件中的行并且不打印前导空格

java - 获取字符串中的字母。为什么我的代码不能很好地工作?

java - 数字格式和输入不匹配异常有何不同

java - Swing 应用程序线程被 JNA 锁定

java - 泛型:T extends MyClass 与 T extends MyClass<T>

java - 获取固定大小的 GridLayout

c++ - 比较C++中的 double