Java程序中的java.lang.NullPointerException错误,用于添加2个对象

时间:2014-09-02 20:08:59

标签: java

我在Java中处理内存时遇到了一些麻烦

import java.util.Scanner;
class P4 {
    public static void main(String[] args) {
        Matrix x=new Matrix(2,4);
        Matrix y=new Matrix(2,4);
        Matrix a=new Matrix(2,4);
        Matrix b=new Matrix(2,4);
        Matrix c=new Matrix(2,4);
        x=a.input();
        y=b.input();
        c=x.add(y);
        c.display();
    }
}
class Matrix{
    private int x,y;
    double m[][];
    Scanner in=new Scanner(System.in);
    Matrix(int a1,int b1){
        x=a1;
        y=b1;
    }
    public Matrix input() {
        double m[][]=new double[x][y];
        System.out.println("Enter "+x*y+" elements : ");
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                m[i][j]=in.nextDouble();
            }
        }
        System.out.println("You Entered : ");
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                System.out.printf("%f\t",m[i][j]);
            }
            System.out.println();
        }
        return this;
    }
    public void display() {
        System.out.println("Elements in the Matrix are : ");
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                System.out.printf("%f\t",m[i][j]);
            }
            System.out.println();
        }
    }
    public Matrix add(Matrix n) {
        Matrix temp=new Matrix(n.x,n.y);
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                temp.m[i][j]=m[i][j]+n.m[i][j];
            }
        }
        return temp;
    }
    public Matrix sub(Matrix n) {
        Matrix temp=new Matrix(n.x,n.y);
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                temp.m[i][j]=m[i][j]-n.m[i][j];
            }
        }
        return temp;
    }
}

在上面的代码中,我无法将x和y保存在内存中(试图通过使用虚拟a和b来保持它们的参考),因此我无法调用add()导致错误。

BTW,我的输出:

Enter 8 elements : 
1 2 3 4 5 6 7 8
You Entered : 
1.000000    2.000000    3.000000    4.000000    
5.000000    6.000000    7.000000    8.000000    
Enter 8 elements : 
8 7 6 5 4 3 2 1
You Entered : 
Exception in thread "main" 8.000000 7.000000    6.000000    5.000000    
4.000000    3.000000    2.000000    1.000000    
java.lang.NullPointerException
    at Matrix.add(P4.java:53)
    at P4.main(P4.java:11)

2 个答案:

答案 0 :(得分:1)

在方法input()中,您声明:

double m[][]=new double[x][y];

这会隐藏实例变量m,其默认值为null。稍后,当您稍后尝试访问m的元素时,您将获得NPE。只需将该行更改为:

m[][]=new double[x][y];

此外,在您的addsub方法中,您尝试访问temp.m而未初始化它。这也会产生一个NPE,应该改变。

我认为最好的办法是改变你的构造函数:

Matrix(int a1,int b1){
    x=a1;
    y=b1;
    m = new int[a1][b1];
}

并消除input()中的初始化。没有理由推迟m的初始化。

答案 1 :(得分:0)

在输入() - 矩阵的方法中,你声明一个新数组,试试这个:

 public Matrix input() {
 //m = new double[x][y]; // do not instantiate a new m[][] here

在构造函数中,添加instatiation

Matrix(int a1, int b1) {
    x = a1;
    y = b1;
    m = new double[a1][b1];
}