好的,所以我在扫描仪前进额外一行时遇到了一个小问题。我有一个文件,其中有许多行,其中包含整数,每个整数之间用一个空格分隔。文件中的某处没有一行,只有单词“ done”。
找到完成后,我们退出循环并打印出小于每行中每个给定整数的最大素数整数(如果整数已经是素数,则对其不执行任何操作)。我们一直进行到“完成”这一行。

我的问题:假设文件包含6行,而在第6行是完成字。我的输出将跳过第1、3和5行。它将仅返回第2和4行的正确值。

这是我在其中读取值的代码段:

Scanner in = new Scanner(
                new InputStreamReader(socket.getInputStream()));
        PrintStream out = new PrintStream(socket.getOutputStream());

        while(in.nextLine() != "done"){


            String[] arr = in.nextLine().split(" ");


现在我感觉到问题是循环中的nextLine调用使行前进,然后nextline.split调用也使行前进。因此,所有奇数行将丢失。是否有另一种方法可以在不前进的情况下检查“完成”,或者我可能会调用一个可能的命令以某种方式将扫描仪重置回循环的开始?

最佳答案

问题是您有2个呼叫nextLine()的方法,例如

String line = in.nextLine();
while (!"done".equals(line)) {
     String[] arr = line.split(" ");

     // Process the line

     if (!in.hasNextLine()) {
         // Error reached end of file without finding done
     }

     line = in.nextLine();
}


另请注意,我已修复了您应该使用"done"equals()支票。

09-11 17:34