当我扫描我的2d数组文本文件时,如果在第一行中没有数字,我就会得到一个异常错误。我的文本文件如下:
0
8, 3, 5, 4, 1, 6, 9, 2, 7
2, 9, 6, 8, 5, 7, 4, 3, 1
4, 1, 7, 2, 9, 3, 6, 5, 8
5, 6, 9, 1, 3, 4, 7, 8, 2
1, 2, 3, 6, 7, 8, 5, 4, 9
7, 4, 8, 5, 2, 9, 1, 6, 3
6, 5, 2, 7, 8, 1, 3, 9, 4
9, 8, 1, 3, 4, 5, 2, 7, 6
3, 7, 4, 9, 6, 2, 8, 1, 5顶部的零点,不应该在那里。但是,我发现如果我去掉它,我的代码就不工作了。这个数字不一定是零,它适用于任何数字,只要有什么东西就行。这是我的代码:
public static void main(String[] args) throws FileNotFoundException {
String fileName = "Sudoku2d.txt";
Scanner inputStream = null;
System.out.println("The file " + fileName + "\ncontains the following lines:\n");
inputStream = new Scanner(new File("C:\\Users\\username\\Documents\\NetBeansProjects\\Sudoku\\Sudoku2d.txt"));
String line = inputStream.nextLine();
int[][] puzzel = new int[9][9];
for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9; column++) {
puzzel[row][column] = Integer.parseInt(line);
}
}
while (inputStream.hasNextLine()) {
line = inputStream.nextLine();
System.out.println(line);
}
inputStream.close();
}下面是我的输出,文本文件的顶部是0:
文件Sudoku2d.txt包含以下行:
8, 3, 5, 4, 1, 6, 9, 2, 7
2, 9, 6, 8, 5, 7, 4, 3, 1
4, 1, 7, 2, 9, 3, 6, 5, 8
5, 6, 9, 1, 3, 4, 7, 8, 2
1, 2, 3, 6, 7, 8, 5, 4, 9
7, 4, 8, 5, 2, 9, 1, 6, 3
6, 5, 2, 7, 8, 1, 3, 9, 4
9, 8, 1, 3, 4, 5, 2, 7, 6
3, 7, 4, 9, 6, 2, 8, 1, 5
BUILD SUCCESSFUL (total time: 0 seconds)如果删除顶部的零,将得到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at array.Array.main(Array.java:23)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)我不想把随机数放在我的文本文件顶部,这样它们才能运行。有人能告诉我为什么会这样吗?
发布于 2015-10-31 17:23:11
如果删除第一行,将得到一个错误,因为只有第一行进入数组(您的2D数组中填充了第一行中的单个数字)。因此,如果删除第一行,Integer.parseInt()将击中文本文件中的逗号,并引发异常。
您需要更改代码,以便将文本文件的内容放入数组中,这样做的一种方法是使用while循环将文本文件的内容放入数组中:
String fileName = "Sudoku2d.txt";
Scanner inputStream = null;
String[] line;
System.out.println("The file " + fileName + "\ncontains the following lines:\n");
inputStream = new Scanner(new File("C:\\Users\\username\\Documents\\NetBeansProjects\\Sudoku\\Sudoku2d.txt"));
int[][] puzzel = new int[9][9];
int row = 0;
while (inputStream.hasNextLine()) {
line = inputStream.nextLine().split(",");
for (int i = 0; i < 9; i++) {
puzzel[row][i] = Integer.parseInt(line[i]);
}
row++;
}可以使用以下代码检查2D数组中的数据:
for (int i = 0; i < 9; i++) {
System.out.println(Arrays.toString(puzzel[i]));
}如果使用当前代码运行此代码,则会看到数组中只填充了第一行中的数字。如果您更改了我的代码,它将显示来自文本文件的数据正在正确地进入数组(一旦删除了第一行中的单数)。
https://stackoverflow.com/questions/33453948
复制相似问题