我正在使用stdlib.jar库运行Sedgwick的Algorithms 1程序,该库有一个方法isEmpty()
,该方法可以确定标准输入中是否还有剩余的参数需要处理。
以下是名为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命令行输入一个特殊的转义序列吗?或者是否有一种标准的方法来告诉扫描仪输入完成的命令行参数?
答案 0 :(得分:0)
答案是:当它在处理参数后挂在窗口提示符下键入ctrl + z,这是标准输入的Windows EOF告诉扫描器没有更多的输入。