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()
以避免这样的错误。
我对这个未完成的程序有疑问。我不明白为什么 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()
以避免这样的错误。