迭代数组时出现NullPointerException

时间:2014-04-28 16:44:38

标签: java arrays oop

当我执行这段代码时,我得到了一个N​​ullPointerException。

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();
        }
    }       
}

有什么问题?以及如何解决它?

1 个答案:

答案 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时才会计算并显示平均值。