java中的Scanner如何返回true到hasNext()?

时间:2015-10-13 19:54:44

标签: java

我正在使用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命令行输入一个特殊的转义序列吗?或者是否有一种标准的方法来告诉扫描仪输入完成的命令行参数?

1 个答案:

答案 0 :(得分:0)

答案是:当它在处理参数后挂在窗口提示符下键入ctrl + z,这是标准输入的Windows EOF告诉扫描器没有更多的输入。