在Java中扫描2D数组txt文件

在Java中扫描2D数组txt文件,java,arrays,file,2d,Java,Arrays,File,2d,当我扫描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

当我扫描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();

}
如果删除顶部的零,则会出现以下错误:

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)

我不想在我的文本文件顶部放置一个随机数,以便它们运行。有人能告诉我为什么会发生这种情况吗?

如果删除第一行,则会出现错误,因为只有第一行进入数组(您的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++;
}
String fileName=“Sudoku2d.txt”;
扫描仪输入流=空;
字符串[]行;
System.out.println(“文件“+fileName+”\n包含以下行:\n”);
inputStream=new Scanner(新文件(“C:\\Users\\username\\Documents\\NetBeansProjects\\Sudoku\\Sudoku2d.txt”);
int[]puzzel=新int[9][9];
int行=0;
while(inputStream.hasNextLine()){
line=inputStream.nextLine().split(“,”);
对于(int i=0;i<9;i++){
puzzel[row][i]=Integer.parseInt(第[i]行);
}
行++;
}
可以使用以下代码检查二维阵列中的数据:

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

如果使用当前代码运行此命令,您将看到数组中只填充了第一行上的数字。如果您更改为“我的代码”,它将向您显示文本文件中的数据正确地进入数组(一旦您删除第一行的单个数字)

请添加您实现的两个版本的代码。代码没有更改。只有文本文件。我唯一改变的是在文本文件的顶部放一个零,而不是在文本文件的顶部放一个零。如果文本文件顶部没有一个随机数(为了简单起见,我只放了一个零),我会得到一个错误。这仍然不起作用。我去掉了文本文件顶部的零,但是现在当我运行代码时,我得到了错误:线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“3”位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)位于java.lang.Integer.parseInt(Integer.java:569)位于java.lang.Integer.parseInt(Integer.java:615)at array.array.main(array.java:33)java结果:1已修复!文本文件中逗号后不能有空格。非常感谢!!!
for (int i = 0; i < 9; i++) {
    System.out.println(Arrays.toString(puzzel[i]));
}