我正在使用算法 Coursera 算法课程中提供的普林斯顿库中的 StdIn.isEmpty() 方法,但对其工作原理感到困惑。我有声明
while (!StdIn.isEmpty())
附带一些读取用户输入的代码,但我似乎无法跳出循环。根据我的理解,如果我按回车键而不输入任何文本,则意味着标准输入为空,并且 while 循环应该被打破。我查找了 isEmpty 的代码,但它没有澄清任何内容:
public static boolean isEmpty() {
return !scanner.hasNext();
}
有人可以澄清标准输入的工作原理并帮助我纠正对此方法的误解吗?
在读取每个数字之前,程序使用 StdIn.isEmpty() 方法检查输入流中是否还有更多数字。我们如何表明我们没有更多数据可输入?按照惯例,我们键入一个特殊的字符序列,称为文件结尾序列。不幸的是,我们在现代操作系统上通常遇到的终端应用程序对这个极其重要的序列使用不同的约定。在本书中,我们使用 Ctrl-D...计算机科学塞奇威克
所以isEmpty
实际上是isCtrl-D
.
另外,尝试一下StdIn.isEmpty()
在终端应用程序中,如果事先没有任何内容,那么您将没有布尔值,而是请求输入的标准输入流。因此,当像下面这样的程序运行时:
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,这意味着当身体没有被触摸时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)