我正在使用算法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 不被触摸时。