我从算法1通过塞奇威克使用具有方法isEmpty()
这是为了确定是否有再留在标准输入到过程参数的stdlib.jar库运行的程序。java中的扫描器如何返回到hasNext()?
这里是包含在类的源文件代码的代码称为StdIn
:
public static boolean isEmpty() {
return !scanner.hasNext();
}
,如果我在命令行中的Windows编译成功后键入以下参数:
10 2 4 6 8 9 0
并按回车键,该程序从一个while循环的主要功能和StdOut.println(p + " " + q);
工作正常行正确处理数据。
public static void main(String[] args) {
int N = StdIn.readInt();
QuickUnionUF uf = new QuickUnionUF(N);
while (!StdIn.isEmpty()) {
int p = StdIn.readInt();
int q = StdIn.readInt();
if (uf.connected(p, q)) continue;
uf.union(p, q);
StdOut.println(p + " " + q);
}
}
但是,包含条件(!StdIn.isEmpty())
while循环永远不会成为真正的和打印答案后,只是挂等待更多的输入。这意味着while条件永远不会确定从命令行输入的结束。
问题
我如何告诉节目我已经完成了我的论点,并没有更多的投入?是否有一个特殊的转义序列,我需要在最后一个参数后面的Windows命令行键入?还是有一个标准的方式来告诉完成的命令行参数的扫描仪输入?
如果您使用控制台作为输入缓冲器,它永远不会是空的。您需要编写一些用户可以输入的退出代码,退出程序。 –
尝试按CTRL-Z https://en.wikipedia.org/wiki/End-of-file即可以结束控制台输入。 – zapl
'StdIn'中的'Scanner'很可能使用'System.in'流,JVM进程正在使用它来通常从控制台读取数据。但是,我们什么时候可以100%确定在该流中不会有用户输入?由于用户可能正在通过控制台写入一些数据,因此System.in需要等到a)用户按回车并发送他的数据b)System.in将检测到该流已关闭(这意味着不再有数据可以使用从中读取)。在情况B你可以使用像http://stackoverflow.com/a/33084716/1393766 – Pshemo