2016-02-21 106 views
1

我得到這個方法乘2個矩陣:空指針訪問

public static AbstractMatrix multiplication(AbstractMatrix m1, AbstractMatrix m2) { 
    AbstractMatrix result = null; 
    int sum=0; 
    if (m1.getNbc() == m2.getNbl()) { 
     for(int c=0;c<m1.getNbl();c++){ 
      for(int d=0;d<m2.getNbc();d++){ 
       for(int k=0;k<m1.getNbc();k++){ 
        sum=somme+m1.getValeur(c, k)*m2.getValeur(k, d); 
       } 
       result.setValeur(c, d, sum); 
       sum=0; 
      } 
     } 

    } 
    return result; 
} 

我得到一個:

空指針訪問變量的結果只能是空

在此位置:result.set()。我知道問題出在AbstractMatrix result=null;,但AbstractMAtrix是一個抽象類,所以我不能實例化它(new AbstractMatrix)。

我該如何解決這個問題?

+0

您是否嘗試過實例化任何可以擴展抽象類結果的類? – Idos

+0

實例化沒有問題,我有,MapMatrix,2DMatrix和是啊,所有這些工作,但在這個方法igot的參數放在AbstractMatrix – Pika

+0

有一件事你可以做的是將接口更改爲'公共靜態void multiplication(AbstractMatrix m1,AbstractMatrix m2,AbstractMatrix r)''並且從你調用'multiplication'的地方做'r = new SomeMatrixType(),因爲如果我的答案幫助了你,你知道這個類的結果應該屬於 – cobarzan

回答

1

您正確識別了您的問題 - >您正試圖調用null的方法,這顯然無法完成。
另外,您正確識別出AbstractMatrixabstract類,因此無法實例化。

需要做些什麼來彌補這一點?

您必須創建一個子類,比方說Matrix extends AbstractMatrix它覆蓋在AbstractMatrix任何abstract方法。然後你可以這樣實例化:

AbstractMatrix result = new Matrix(); 

這將使你的代碼正確運行,不會拋出NPE。

+0

是的,謝謝,但我認爲我會在這裏有另一個問題,因爲我需要setValeur方法,這種方法是AbstractMatrix中的一個抽象類型,我必須在每個根據matri的類型擴展AbstractMatrix的子演算中覆蓋它,因爲我得到了Mapmatrix,1D MAtrix,2D矩陣,我也有ArrayLi stMatrix ,,但在像你說的矩陣類中,我不知道如何覆蓋setValeur方法 – Pika

+0

這不是問題。如果你在你的'abstract'類中實現了'setValeur',那麼你可以在它的所有**子類中使用它,而不需要覆蓋它。如果你的'setValeur'也是'abstract',那麼你**需要在'AbstractMatrix'的每個子類中重寫它,的確是爲了讓你的程序正常工作。 – Idos

+0

setValeur是AbstracMatrix中的抽象方法,我必須覆蓋它的每個子類 – Pika