【发布时间】:2019-12-09 18:35:21
【问题描述】:
我正在尝试读取文件并将内容放入从第 5 行开始的二维数组中。我确实让程序运行没有错误,但出现问题并且它没有填充数组。
我进行了测试,发现在我引入了一个 while 循环后似乎出了点问题。文件的前4行在while循环外被一一读取成功,所以应该不是文件读取器本身的问题。
这是一个 while 循环,它应该读取剩余的行并将每个字符串的每个字符放入一个 2D 数组中:
while (fileReader.hasNextLine()) {
String fileLine = fileReader.nextLine();
int k = 0;
for (int i = 0; i < fileLine.length(); i++) {
for (int j = 0; j < columns; j++) {
fileArray[k][j] = fileLine.charAt(i);
}
}
k++
}
但是,如果我尝试打印数组,它只会打印空行。为什么它不填充数组,为什么不给出任何错误?当然,我怎样才能修复此代码以使其正常工作?
// 编辑。这是整个代码,因为它似乎有更多的问题,而不仅仅是 for 循环(我为此修复了):
import java.io.*;
import java.util.Scanner;
public class Filer {
public static void main (String[] args) {
Scanner fileReader = null;
char[][] fileArray = null;
try {
String fileName = "alphabet.txt";
File textFile = new File(fileName);
fileReader = new Scanner(fileName);
String line1 = fileReader.nextLine();
int rows = Integer.parseInt(line1);
String line2 = fileReader.nextLine();
int columns = Integer.parseInt(line2);
fileArray = new char[rows][columns];
char line3 = fileReader.nextLine().charAt(0);
char line4 = fileReader.nextLine().charAt(0);
int i = 0;
while (fileReader.hasNextLine()) {
String fileLine = fileReader.nextLine();
for (int r = 0; r < fileLine.length(); r++) {
fileArray[i][r] = fileLine.charAt(r);
}
i++;
}
fileReader.close();
}
catch (Exception e) {
if (fileReader != null) {
fileReader.close();
}
}
if (fileArray != null) {
for (int i = 0; i < fileArray.length; i++) {
System.out.print(fileArray[i]);
System.out.println();
}
}
else {
System.out.println("Error!");
}
}
}
文件内容为:
4
4
x
o
xxxx
xxox
ooxo
xxxx
【问题讨论】:
-
您有两个嵌套循环来读取单行的字符。在循环中,你总是填充 fileArray[k],其中 k 总是 0。你需要完全重新考虑这个循环。目前还不清楚它应该做什么,所以很难提供帮助。
-
分享第 5 行的示例数据。
-
k 应该代表行,我推断它应该像那样工作,因为当 while 循环重新启动时它不会增长吗?因此,假设文本文件中的第 5 行是“abcdefg”,for 循环将根据索引号(k 表示行,j 表示列)将字符一一放入数组中,这将使数组的第一行是'a','b','c','d','e','f','g'。之后,k 将增加 1,以便文件第 6 行的字符将放置在数组的第二行。
-
我编辑了帖子并包含了整个代码,以防其他地方出现问题。这是我第一次在 java 中处理文件,所以我确信这很混乱,但非常感谢您的帮助。
-
也许更有经验的人在这里看到了“真正的”问题,但如果我错了,请纠正我:由于您在 try-section 中定义了 fileArray,因此 if-loop 无法在外部使用它?