扫描程序在while循环中没有返回新行

时间:2016-04-02 16:55:36

标签: java network-programming

代码片段

while(!((input = sc.nextLine()) != null)) {
            sc = new Scanner(input).useDelimiter(" ");
            while (sc.hasNextLine()) {
                in[index] = sc.next();
                index++;
            }
            if (index < 3 || !in[0].equals("ping")) {
                throw new IllegalArgumentException(
                        "Usage ping <destination> <port number missing> . . . ."
                                + in[0] + " " + in[1] + " " + in[2]);
            }
}

我想继续阅读用户输入,但在第一次迭代后,我没有找到新的行。扫描仪不会等待用户输入,而是继续前进。 谢谢

1 个答案:

答案 0 :(得分:1)

您的顶级while循环正在执行与您想要的相反的操作。首先,它将input设置为等于sc.nextLine(),这很好。然后将inputnull进行比较。如果此比较产生true,那么您有输入,这意味着循环应该继续。但是,您正在否定该比较的结果,这使得循环在有输入时终止。

删除感叹号,你应该很好。

修改

第二个想法,当sc.hasNextLine()返回false时,你的内部while循环正在退出。之后,您将通过条件语句并返回到顶部。由于sc.hasNextLine()已经返回false,当然sc.nextLine()将返回null。输入已经在内部循环中结束,因此外部循环也将退出。