尝试读取 data.txt 文件并进行计算

Trying to read a data.txt file and do calculations

我正在使用 Integer.parseInt() 将 data.txt 每一行的 String 变量更改为 int 数据类型。 data.txt 文件如下所示:

5
6
3
5
0

...等等。我在文本文件中也没有空格,所以我应该能够完美地解析每一行的字符串。我在文本文件的结尾或开头也没有额外的空行。这是错误消息:

Exception in thread "main" java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)

和代码:

public static int[][][] readFile() throws IOException{
    int[][][] hero = new int[2][2][9];

    try(BufferedReader br = new BufferedReader(new FileReader("data.txt")))        {
        String line = br.readLine();
        int num;
        while (line != null) {
            for (int i=0;i<2;i++){
                for (int j=0;j<2;j++){
                    for (int k=0;k<9;k++){
                        line = br.readLine();
                        num = Integer.parseInt(line);
                        hero[i][j][k] = num;
                    }
                }
            }
        }
    }
    return hero;
}

null 在文件末尾提供。你应该在检测到时跳出你的循环:

line = br.readLine();
if (line == null) break;

我能够很容易地找到该错误,当您遇到 NullPointerException 时,总是尝试在控制台中打印出来,然后再对其进行操作,以确保万无一失。我刚刚在Integer.parseInt()之前添加了System.out.println(line),记得这样做,这会让你以后的生活更轻松。

你得到的是空值,因为你的 data.txt 上有 5 行,你正在读取新行 37 次(一次在循环之前,36 次在三个循环中)。正如罗伯特所说,您应该使用 break 或设置更改代码执行的顺序来打破循环。此外,您的第一个 read 行未分配给您的 num 变量。尝试更改为:

try(BufferedReader br = new BufferedReader(new FileReader("data.txt")))        {
    String line = br.readLine();
    int num;
    while (line != null) {
        for (int i=0;i<2;i++){
            for (int j=0;j<2;j++){
                for (int k=0;k<9;k++){
                    if(line==null){
                        k=9;
                    }
                    num = Integer.parseInt(line);
                    line = br.readLine();
                    hero[i][j][k] = num;
                }
            }
        }
    }
}