在 Java 中扫描二维数组 txt 文件

Scan in 2D array txt file in Java

当我扫描我的二维数组文本文件时,如果第一行没有数字,我会收到异常错误。我的文本文件如下:

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();

}

这是我的输出,文本文件顶部有零:

文件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)

我不想为了 运行 而必须在我的文本文件的顶部放置一个随机数。谁能告诉我为什么会这样?

如果删除第一行,则会出现错误,因为只有第一行进入数组(您的二维数组在第一行中填充了单个数字)。因此,如果您删除第一行,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++;
}

您可以使用以下代码检查二维数组中的数据:

for (int i = 0; i < 9; i++) {
    System.out.println(Arrays.toString(puzzel[i]));
}

如果您 运行 使用您当前的代码,您将看到该数组只填充了第一行中的数字。如果你更改我的代码,它会告诉你文本文件中的数据正在正确地进入数组(一旦你删除了第一行的那个数字)