2014-09-02 60 views
-1

我有一些麻烦的Java显示java.lang.NullPointerException错误在Java程序中添加2个对象

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()。

顺便说一句,我的输出:

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) 
+0

线11:C = x.add(Y);第53行:temp.m [i] [j] = m [i] [j] + n.m [i] [j]; – AndreDuarte 2014-09-02 20:13:32

+1

请参阅http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it – Raedwald 2014-09-02 21:46:43

回答

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的初始化。

+0

+1。但是,我会辩解地说,'m'实际上不是一个类变量,而是一个实例变量。当标记为“静态”时,实例变量将成为Java中的类变量。 – 2014-09-02 20:14:26

+0

@CraigOtis - 对。相应地更新了答案。 – 2014-09-02 20:15:45

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]; 
} 
相关问题