2014-09-02 73 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]; 
} 
相關問題