簡體   English   中英

Java 在讀取文件時出現 Scanner 和 hasNextLine() 問題

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

我對這個未完成的程序有疑問。 我不明白為什么當我運行它時會返回“未找到行異常”。 我設置了一個 while 循環,其目的是檢查這一點,但我做錯了什么。 我正在嘗試將文件中的信息存儲到類的二維數組中。

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循環中間用完行,則會引發異常。

我實際上不太確定你的代碼應該做什么,但至少你需要在每次實際運行nextLine()之前添加一個hasNextLine()檢查以避免這樣的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM