Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试读取data.txt文件并进行计算_Java_Bufferedreader_Filereader - Fatal编程技术网

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

Java 正在尝试读取data.txt文件并进行计算,java,bufferedreader,filereader,Java,Bufferedreader,Filereader,我正在使用Integer.parseInt()将data.txt的每一行的字符串变量更改为int数据类型。data.txt文件如下所示: 5 6 3 5 0 ……等等。我在文本文件中也没有空格,所以我应该能够完美地解析每一行的字符串。我在文本文件的结尾或开头也没有额外的空行。这是错误消息: Exception in thread "main" java.lang.NumberFormatException: null at java.lang.Integer.parseInt(Unkn

我正在使用
Integer.parseInt()
将data.txt的每一行的字符串变量更改为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;
}
publicstaticint[]readFile()引发IOException{
int[]hero=新int[2][2][9];
try(BufferedReader br=newbufferedreader(newfilereader(“data.txt”)){
String line=br.readLine();
int-num;
while(行!=null){

for(int i=0;i
null
在文件末尾提供。当检测到时,应中断循环:

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

我很容易就发现了这个bug,当你得到NullPointerException时,总是在控制台中打印出来,然后再对它做一些事情,只是为了确保。我刚刚在
Integer.parseInt()之前添加了
System.out.println(line)
,记住要这样做,这将使您的生活在未来变得更加轻松。

您的data.txt上有5行,并且您正在阅读新行37次(循环前一次,三个循环中36行),因此将变为空。正如robert所述,您应该使用break或设置来中断循环,更改代码的执行顺序。此外,您的第一个读取行没有分配给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;
                }
            }
        }
    }
}
try(BufferedReader br=new BufferedReader(new FileReader(“data.txt”)){
String line=br.readLine();
int-num;
while(行!=null){
对于(int i=0;i