我一直在尝试从.txt文件中保存9x9的2D数组。我已经在这个网站上花了很长时间试图让它工作,经过大量的调整后,我非常接近它。唯一的问题是没有任何东西保存到阵列中!
这是我的代码:
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.awt.*;
public class test {
public static void main(String[] args) throws IOException {
int[][] thing = new int[9][9];
int row = 0;
int rows = 9;
int columns = 9;
File fin = new File("C:\\Users\\David\\workspace\\tester\\initial.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(fin));
String line = reader.readLine();
int lineNum = 0;
while (line != null) {
lineNum++;
System.out.println("line " + lineNum + " = " + line);
line = reader.readLine();
String [] tokens = line.split(",");
for (int j=0; j<tokens.length; j++) {
System.out.println("I am filling the row: " + row);
thing[row][j] = Integer.parseInt(tokens[j]);
}
row++;
}
System.out.println("I am printing the array for testing purposes: ");
for (int i=0; i < rows; i++) {
for (int j = 0; j < columns; j++)
System.out.print(thing[i][j]);
System.out.println("");
}
} catch (IOException error) {
} finally {
if (reader != null) reader.close();
}
}
}
我应该说我这样做是为了测试数独游戏,我试图创建一个仅仅是侧面项目,我只是非常沮丧。
这也是我在这个网站上的第一篇文章,所以我可以轻松地进行格式化。谢谢大家!
编辑:我做了更改codaddict告诉了我,现在我得到输出:
line 1 = 5 3 0 0 7 0 0 0 0
I am filling the row: 0
Exception in thread "main" java.lang.NumberFormatException: For input string: "6 0 0 1 9 5 0 0 0"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at test.main(test.java:36)
答案 0 :(得分:3)
你在做:
while (line != null) {
lineNum++;
System.out.println("line " + lineNum + " = " + line);
line = reader.readLine();
}
// At this point you've already reached the end of the file
// and line is null, so you never go inside the next while.
while (line != null) {
// you need to split on space not comma
String [] tokens = line.split(" ");
for (int j=0; j<tokens.length; j++) {
System.out.println("I am filling the row: " + row);
thing[row][j] = Integer.parseInt(tokens[j]);
}
row++;
}
要解决此问题,您需要处理外部while循环中的每一行:
while (line != null) {
lineNum++;
System.out.println("line " + lineNum + " = " + line);
line = reader.readLine();
String [] tokens = line.split(",");
for (int j=0; j<tokens.length; j++) {
System.out.println("I am filling the row: " + row);
thing[row][j] = Integer.parseInt(tokens[j]);
}
row++;
}
答案 1 :(得分:1)
字符串line
在退出第一个while循环后已经为空,因此第二个while循环从不执行,因此没有值被分配给数组单元格,int数组单元格的默认值为零得到印刷。在第一个循环中插入赋值部分以解决问题。
答案 2 :(得分:0)
你已经在第一个while循环中读取了整个文件。
因此,您无法在第二个循环中打印值。
确保在第一个while循环中存储文本文件中的值。
while (line != null) {
lineNum++;
System.out.println("line " + lineNum + " = " + line);
line = reader.readLine();
String [] tokens = line.split(",");
for (int j=0; j<tokens.length; j++) {
System.out.println("I am filling the row: " + row);
thing[row][j] = Integer.parseInt(tokens[j]);
}
row++;
}