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