我正在使用算法Coursera算法类(class)中提供的普林斯顿库中的StdIn.isEmpty()方法,但对其工作方式感到困惑。我有陈述

while (!StdIn.isEmpty())

附带一些读取用户输入的代码,但我似乎无法打破循环。根据我的理解,如果我在不输入任何文本的情况下按下Enter键,则意味着标准输入为空,而while循环应被中断。我查找了isEmpty的代码,但未澄清任何内容:
public static boolean isEmpty() {
    return !scanner.hasNext();
}

有人可以澄清标准输入的工作原理,并帮助我解决对这种方法的误解吗?

最佳答案



因此isEmpty实际上是isCtrl-D

另外,请在终端应用程序中尝试StdIn.isEmpty()而不进行任何操作,这将使您没有 boolean 值,而只有标准输入流请求输入。因此,当运行以下程序时:

public class Average
  {
     public static void main(String[] args)
     {  // Average the numbers on standard input.
        double sum = 0.0;
        int n = 0;
        while (!StdIn.isEmpty())
        {  // Read a number from standard input and add to sum.
           double value = StdIn.readDouble();
           sum += value;
           n++;
        }
        double average = sum / n;
        StdOut.println("Average is " + average);
     }
 }

,则是在第一次确定条件while (!StdIn.isEmpty)而不是StdIn.readDouble()时弹出标准输入流。如果您随后键入一些数字,然后将它们返回,导致标准输入流为非空,则程序将在while主体内跳转。我通过测试发现是这种情况
> java Average
 [DrJava Input Box] (And I hit Ctrl+D here)
Average is NaN

NaN表示n = 0,这意味着当 body 不被触摸时。

10-04 11:38
查看更多