Java 读取文件时 Scanner 和 hasNextLine() 出现问题

Java issues with Scanner and hasNextLine() while reading a file

我对这个未完成的程序有疑问。我不明白为什么 returns 当我 运行 时出现“未发现行异常”。我设置了一个 while 循环,其目的是检查这个,但我做错了什么。我正在尝试将文件中的信息存储到 class.

的二维数组中
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.File;
import java.util.Arrays;

public class LabProgram {
   public static void main(String[] args) throws IOException {
      Scanner scnr = new Scanner(System.in);
      int NUM_CHARACTERS = 26;      // Maximum number of letters
      int MAX_WORDS = 10;           // Maximum number of synonyms per starting letter
      String userWord = (scnr.next()) + ".txt"; //Get word user wants to search
      char userChar = scnr.next().charAt(0); //Get char user wants to search
      String[][] synonyms = new String[NUM_CHARACTERS][MAX_WORDS];  // Declare 2D array for all synonyms
      String[] words = new String[MAX_WORDS]; // The words of each input line
      
      File aFile = new File(userWord);
      
      Scanner inFile = new Scanner(aFile);
      
      while(inFile.hasNextLine()) {
         for(int i = 0; i < synonyms.length; i++) {
            words = inFile.nextLine().trim().split(" ");
            for(int wordCount = 0; wordCount < words.length; wordCount++) {
               synonyms[i][wordCount] = words[wordCount];
            }
         }
      }
      
   }
}

这个 for 循环有问题:

for (int i = 0; i < synonyms.length; i++) {
    words = inFile.nextLine().trim().split(" ");
    ....
}

您正在从 i=0 迭代到 synonym.length-1 次,但该文件没有这么多行,因此,一旦您的文件超出行数但 for 循环有作用域要进行更多迭代,inFile.nextLine() 没有一行并因此抛出异常。

我不知道你到底在做什么或想通过这段代码实现什么,但这就是给你带来麻烦的原因。

希望能回答您的问题。

基本上你的问题是你只在 for 循环开始之前检查 hasNextLine(),而你实际上 得到 的下一行循环的每次迭代。因此,如果您在 for 循环中间 运行 越界,则会抛出异常。

我实际上不太确定你的代码应该做什么,但至少你需要添加一个 hasNextLine() 检查 每次 在你真正运行 nextLine() 以避免这样的错误。