2016-11-15 117 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 –

相关问题