【问题标题】:java.lang.NullPointerException: Java Beginner [duplicate]java.lang.NullPointerException:Java初学者[重复]
【发布时间】:2015-02-11 00:50:49
【问题描述】:

大家好,对不起,我对此非常陌生,但我正在尝试读取文件并放入数组中以计算其中数据的平均值,这是我的代码,但每次我得到" 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();
}
}
}

【问题讨论】:

  • 你正试图通过它的声音来读取一个空行。
  • 你的file对象是在哪里创建的?

标签: java arrays nullpointerexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用您的调试器并检查变量“文件”。当您的变量为 null 并且您尝试从 null 变量调用函数时,将引发 NullPointerException。

    【讨论】:

      【解决方案3】:

      你很可能在打电话

      file.readLine().split()
      

      在文件末尾之后,所以 file.readLine() 为空。

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

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

      【讨论】:

        【解决方案4】:

        假设您已正确创建 file,当到达文件末尾时,方法 readline()returns 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.
                 }
               }
             ...
           }
        

        【讨论】:

          猜你喜欢
          • 2019-05-30
          • 2022-10-15
          • 2013-07-04
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 1970-01-01
          • 2011-03-15
          相关资源
          最近更新 更多