【问题标题】:Java Scanner throws NoSuchElementException: No Line FoundJava Scanner 抛出 NoSuchElementException:未找到行
【发布时间】:2014-10-06 19:06:49
【问题描述】:

我不知道为什么它不起作用。我已经两次和三次检查 FileWriter 中的文件是否有文本(由另一个 PrintWriter 早先在单独的程序中输入),但 while 语句似乎没有运行。注释掉的行是我正在运行的各种测试,试图弄清楚发生了什么。我想要解决的是让它遍历数组并向所有人员添加组 ID。如果有人知道发生了什么,将不胜感激。对于任何格式错误,我会提前道歉,任何关于如何更容易帮助的 cmet 也将不胜感激。

public static void updateWinners(Person[] Players, int n)
            throws FileNotFoundException {
            // n is 2 or 4 depending on round
        File fileS = new File(
                "C:\\Users\\Patrick\\Desktop\\New folder\\FileWriter\\Win");
        File fileP = new File(
                "C:\\Users\\Patrick\\Desktop\\New folder\\Bracket\\Win");
        Scanner fs = new Scanner(fileS);
        PrintWriter writer = new PrintWriter(fileP);
            //int q=0;
        while (fs.hasNextLine()) {
                //System.out.println(Players[q].toString());
            for (int i = 0; i < Players.length; i++) {
                if (fs.nextLine().equals(Players[i].toString())) {
                    Players[i].addGroup(alpha[i / n]);
                    System.out.println(Players[i].toString());
                    writer.println(Players[i].toString());
                }
            }
                //q++;
        }
        writer.close();
        fs.close();
    }

【问题讨论】:

  • if (fs.nextLine().equals(Players[i].toString())) 这就是问题所在。
  • 尝试在 while 循环之前打印 fileS.exists()。所有这些反斜杠的路径格式似乎都很狡猾。由于您在 for 循环中使用 .nextLine(),因此当 while 循环开始时,您可能会有一个新行,但随后会在循环内用完。

标签: java while-loop java.util.scanner printwriter


【解决方案1】:

这样做,

while (fs.hasNextLine()) {
    String s = fs.nextLine();
            //System.out.println(Players[q].toString());
        for (int i = 0; i < Players.length; i++) {
            if (s.equals(Players[i].toString())) {
                Players[i].addGroup(alpha[i / n]);
                System.out.println(Players[i].toString());
                writer.println(Players[i].toString());
            }
        }
            //q++;
    }

解释:

当您每次在播放器循环中调用fs.nextLine() 时。它从文件中读取一个新行。所以在你完成所有播放器之前读取文件的所有行。

当您尝试读取并且文件中没有更多数据时,扫描仪会引发异常。

Source

投掷:

NoSuchElementException - 如果没有找到行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多