我需要使用文本文件制作一个20x45阵列。例如,使用3 * 5阵列:
文件输入:
四分和七年前
数组(使用_表示空格):
F o u r _
s c o r e
_ a n d _
我会透明地说我对Java很陌生并且我已经尝试了一段时间并且不知道从哪里开始。到目前为止,我已经得到了这段代码:
// Create file instance.
java.io.File file = new java.io.File("array.txt");
int totalRow = 20;
int totalColumn = 45;
char[][] myArray = new char[totalRow][totalColumn];
Scanner scanner = new Scanner(file);
for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {
char[] chars = scanner.nextLine().toCharArray();
for (int i = 0; i < totalColumn && i < chars.length; i++) {
myArray[row][i] = chars[i];
System.out.println(myArray[row][i]);
}
//System.out.println("");
}
我尝试了很多不同的迭代,而且我被卡住了 提前谢谢。
答案 0 :(得分:0)
问题是第一次运行scanner.nextLine().toCharArray();
时,它会读取整个文本,因为该文件只包含一行。但是,在该循环中,您的代码只处理2d数组的第一行。
for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {
char[] chars = scanner.nextLine().toCharArray(); //Notice this reads the entire text the first loop when row=0
for (int i = 0; i < totalColumn && i < chars.length; i++) {
//This loop fills the first row of the array when row=0
myArray[row][i] = chars[i];
System.out.println(myArray[row][i]);
}
//End of loop, the next time scanner.hasNextLine() returns false and loop terminates
}
要解决此问题,您应该在循环外阅读chars
(只读一次)。然后使用单个索引迭代字符,同时迭代2d数组。
char[] chars = scanner.nextLine().toCharArray();
int i = 0;
for (int row = 0; row < totalRow & i<chars.length; row++) {
for (int col = 0; col < totalColumn & i<char.length; col++) {
myArray[row][col] = chars[i];
i++;
}
}