java.lang.NullPointerException:Java初学者

时间:2014-12-12 10:19:12

标签: java arrays nullpointerexception

嗨,大家好抱歉,我是一个荒谬的新人,但我试图读取一个文件并放入一个数组来计算那里的数据的平均值,这是我的代码,但每次我得到“String [] row = file.readLine()。split(”“);”

的NullException
int nRows =652; 
int nCols =7;

double data [][] = new double[nRows][nCols];
char map [][]  = new char[nRows][nCols];

for (int i=1; i < nRows ; i++) {

    String[] row = file.readLine().split(" ");
    // below here ......
    for (int j=1; j < nCols-1 ; j++) {
        data[i][j] = Double.parseDouble(row[j]); 
        //put if no more data then stop.        
    }
}

file.close();

for (int i =0; i < nRows; i++) { 
    for (int j=0; j< nCols; j++) { 
       map[i][j] = '0'; 

    }
}

for (int i =1; i < (nRows -1); i++) { 
    for (int j=1; j < (nCols -1); j++) {

       double sum = data [i-1] [j] + data [i] [j-1] + data [i][j+1] + data [i+1][j];
       double average = sum /4;
       System.out.println(average);
    }
}

for (int i=0; i <nRows; i++) {
    for (int j=0; j <nCols; j++) {
       System.out.print(map [i][j] + "");
    }



for (int h = 1; h < (nRows -1); h++) {
    for (int l =1; (l <nCols -1); l++) {

          double sum = data [h-1] [h] + data [i] [h-1] + data [i] [h+1] + data [i+1] [h]; 
         // this is average.
         double average = sum /4;
         System.out.println(average);

    }
}
}

for (int i=0; i <nRows; i++) {
 for (int j=0; j <nCols; j++) {
     System.out.print(map [i][j] + " ");
 }
 System.out.println();
}
}
}

4 个答案:

答案 0 :(得分:2)

可能你的线路少于652线。当没有更多行要读取时,file.readLine()返回null。

答案 1 :(得分:0)

使用调试器并检查变量&#39; file&#39;。当您的变量为null并且您尝试从null变量调用函数时,将抛出NullPointerException。

答案 2 :(得分:0)

您很可能正在致电

file.readLine().split()

在文件结束后,file.readLine()为null。

您可以将该行包装在空检查中 - 如下所示:

String[] row;
String[] rawRow = file.readLine();
if (rawRow != null) {
    row = rawRow.split(" ");
} else {
    break;
}

答案 3 :(得分:0)

假设您已正确创建file,方法readline()在到达文件末尾时返回null,请参阅文档HERE

您始终可以检查返回值是否为空:

    for (int i=1; i < nRows ; i++) {

      String line = file.readLine();
      if(line!=null){
        String[] row = file.readLine().split(" ");
        // below here ......
        for (int j=1; j < nCols-1 ; j++) {
            data[i][j] = Double.parseDouble(row[j]); 
            //put if no more data then stop.
         }
       }
     ...
   }