2016-11-15 120 views
1

我想在java上乘一個數組和一個2d數組,並且我的程序編譯但是一直返回錯誤java.lang.NullPointerException;當我嘗試輸入任何內容時爲null。這是我到目前爲止的代碼:在java中乘以一個數組和一個二維數組

static double[][] productWithDiagonal(double[] a, double[][] b) 
{ 
    double[][] c = new double[3][]; 

    { 
     for (int i = 0; i < b.length; ++i) { 
      for (int j = 0; j < b[1].length; ++j) {  
       c[i][j] = a[j] * b[i][j]; 
       } 
      } 
     } 
    return c; 
    } 

感謝

+1

你沒有給出'c'的第二維,所以你有效地寫'double [] [] c = {null,null,null}'。 –

+0

'b [1] .length'是一個數組? – XtremeBaumer

+0

是的,你沒有初始化你的列 –

回答

2

此位置:

double[][] c = new double[3][]; 

只有實例你的 「行」。你需要像

double[][] c = new double[3][3]; 

或多種有用的可能

... c = new double[b.length][b[0].length]; 

代替。但是可以肯定的是:那些數字很重要。你應該確保b例如是一個真正的「規則矩形」矩陣 - 所以所有行具有相同的列數。當然a也應該具有與b相同的列數。您可以在方法開始時添加這些檢查;以確保形狀ab實際上允許這種乘法!

您看到,在Java中,雙暗數組不過是一個包含另一個數組的數組。您的初始代碼只會啓動該「外部」陣列,將「內部」陣列留在null

+1

這可能是更好做'新雙[b.length] [b [0] .length]'(或'b [1]'.length,因爲這是環路防護使用的)。 –

+0

好主意。補充說;謝謝! – GhostCat

+0

感謝您的回覆,但嘗試過這一點,現在當我輸入數組時,當我嘗試運行它時,出現java.lang.ArrayIndexOutOfBoundsException –

相關問題