当我执行这段代码时,我得到了一个NullPointerException。
Exception in thread "main" java.lang.NullPointerException
at Matrixer.cellNeighborsAverage(Matrixer.java:31)
at Matrixer.computeAverages(Matrixer.java:23)
at Matrixer.main(Matrixer.java:75)
代码:
import java.util.Scanner;
import java.lang.*;
class Matrixer
{
static double[][] matrix, computedMatrix;
final int rows, cols;
public Matrixer(int N, int M, double[][] imatrix)
{
rows = N;
cols = M;
matrix = imatrix;
computedMatrix = new double[N][M];
}
public void computeAverages()
{
for (int i = 1; i < rows - 1; i++)
{
for (int j = 1; j < cols - 1; j++)
{
computedMatrix[i][j] = cellNeighborsAverage(i, j);
}
}
}
private double cellNeighborsAverage(int row, int col)
{
// Ignore center cell
double sum = matrix[row - 1][col - 1] + matrix[row - 1][col]
+ matrix[row - 1][col + 1] + matrix[row][col - 1]
+ matrix[row][col + 1] + matrix[row + 1][col - 1]
+ matrix[row + 1][col] + matrix[row + 1][col + 1];
return sum / 8;
}
public void printComputedMatrix()
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
System.out.printf("%.2f", computedMatrix[i][j]);
System.out.print(", ");
}
System.out.println();
}
}
public static void main(String[] args) throws NullPointerException
{
Scanner sc=new Scanner(System.in);
try {
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
matrix[i][j]=sc.nextInt();
}
catch(NullPointerException e )
{
Matrixer mx = new Matrixer(5, 5, matrix);
mx.computeAverages();
mx.printComputedMatrix();
}
}
}
有什么问题?以及如何解决它?
答案 0 :(得分:1)
您永远不会初始化您在main
中使用的矩阵。此外,您可能不希望重用传递给Matrixer
尝试将数组的声明更改为:
double[][] matrix, computedMatrix;
然后在主
中使用其他数组public static void main(String[] args) throws NullPointerException {
Scanner sc = new Scanner(System.in);
double[][] inputMatrix = new double[5][5];
try {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
inputMatrix[i][j] = sc.nextInt();
}
}
Matrixer mx = new Matrixer(5, 5, inputMatrix);
mx.computeAverages();
mx.printComputedMatrix();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
请注意,我还更改了main
中的逻辑,只有在您获得NullPointerException时才会计算并显示平均值。