2012-10-31 124 views
2
public class DoubleMatrix 
{ 
    private double[][] doubMatrix; 

    public DoubleMatrix(int row, int col) 
    {    
      if(row > 0 && col > 0) 
      { 
        makeDoubMatrix(row,col); 
      } 
      else 
      { 
        row = 1; 
        col = 1; 
      } 
    } 

    public DoubleMatrix(double[][] tempArray) 
    { 
      if(tempArray != null) 
      { 
        for(int i = 0; i < tempArray.length-1;i++) 
        { 
          if(tempArray[i].length == tempArray[i+1].length) 
          { 
            tempArray = doubMatrix; 
          } 
        } 
      } 
      else 
      { 
        makeDoubMatrix(1,1); 
      } 
    } 

    public int getDim1() 
    { 
      return doubMatrix.length; 
    } 

    public int getDim2() 
    { 
      return doubMatrix[0].length; 
    } 

    private void makeDoubMatrix(int row, int col) 
    { 
     double[][] tempArray = new double[row][col]; 
     for (int i = 0;i < row;i++) 
     { 
      for(int j = 0;j < col;j++) 
      { 
       tempArray[i][j] = Math.random() * (100);    
       doubMatrix[i][j] = tempArray[i][j]; 
     } 
     } 
    } 
    public DoubleMatrix addMatrix(DoubleMatrix secondMatrix) 
    {  
      //this. doubMatrix = doubMatrix; 
      double[][] tempArray; 
      if(secondMatrix.doubMatrix.length == doubMatrix.length) 
        if(secondMatrix.doubMatrix[0].length == doubMatrix[0].length) 
        { 
          tempArray = new double[doubMatrix.length][doubMatrix[0].length]; 
          for(int i = 0; i< secondMatrix.doubMatrix.length;i++) 
            for(int j = 0; j< secondMatrix.doubMatrix[i].length;j++) 
            { 
             tempArray[i][j] = secondMatrix.doubMatrix[i][j] + doubMatrix[i][j];// add two matrices 
            }//end for  
          return new DoubleMatrix (tempArray); 
        } 


          return new DoubleMatrix(1,1);                 
    } 


    public DoubleMatrix getTransposedMatrix() 
    { 
      double[][] tempArray = new double[doubMatrix.length][doubMatrix[0].length]; 
      for(int i = 0;i < doubMatrix.length;i++) 
      for(int j = 0;j < doubMatrix[i].length;j++) 
      { 
       tempArray[j][i] = doubMatrix[i][j];// transposed matrix2   
      }//end for   
      return new DoubleMatrix(tempArray); 
    } 

    public DoubleMatrix multiplyingMatrix(DoubleMatrix secondMatrix) 
    { 
      double[][] tempArray = new double[secondMatrix.doubMatrix.length][doubMatrix[0].length]; 
      //check if dimension of matrix1 equal to dimension of matrix2 
      if(secondMatrix.doubMatrix[0].length == doubMatrix.length) 
        if(doubMatrix.length == secondMatrix.doubMatrix[0].length) 
      { 

          for (int i = 0; i <secondMatrix.doubMatrix.length; i++) 
        { 
         for(int j = 0; j < doubMatrix[0].length; j++) 
         { 

          for (int k = 0; k < doubMatrix.length; k++) 
          { 
           tempArray[i][j] = tempArray[i][j] + secondMatrix.doubMatrix[i][k]*doubMatrix[k][j]; // multiply 2 matrices 

          } 
         } 
        }//end for 
      }// end if 



          return new DoubleMatrix(1,1);         
    } 

    public void printMatrix(String text) 
    { 
      System.out.println(text);// output string 
      for(int i = 0; i< doubMatrix.length;i++) 
      { 
        for(int j = 0; j< doubMatrix[i].length;j++)  {         
         System.out.printf("%9.1f", doubMatrix[i][j]);// out put value for matrices     
        } 
        System.out.println(); 
      } 
    } 
} 

public class Program3 
{ 
public static void main(String[] args) 
{ 
     int num1 = (int) (Math.random()*(10-3+1)+3); 
     int num2 = (int) (Math.random()*(10-3+1)+3); 
     DoubleMatrix doubMatObj1 = new DoubleMatrix(num1,num2); 
     DoubleMatrix doubMatObj2 = new DoubleMatrix(doubMatObj1.getDim1(),doubMatObj1.getDim2()); 
     DoubleMatrix doubMatObj3; 


     doubMatObj2.getDim1(); 

     doubMatObj3 = doubMatObj1.addMatrix(doubMatObj2); 
     doubMatObj1.printMatrix("First Matrix Object"); 
     doubMatObj2.printMatrix("Second Matrix Object"); 
     doubMatObj3.printMatrix("Result of Adding Matrix Objects"); 
     doubMatObj2 = doubMatObj2.getTransposedMatrix(); 
     doubMatObj2.printMatrix("Result of inverting Matrix Object"); 
     doubMatObj3 = doubMatObj1.multiplyingMatrix(doubMatObj2); 
     doubMatObj3.printMatrix("Result of Multiplying Matrix Objects"); 
} 
} 

嗨,我有在makeDoubMatrix方法的最后一行语句NullPointerException误差以及在侧的呼叫makedoubMatrix如果第一构造函数的语句。 当我已经初始化它时,doubMatrix似乎为空。我将如何解决这个问题?2D阵列空指针异常错误

回答

4

要初始化数组,即:

private double[][] doubMatrix = new double[size1][size2]; 

其中size1至size2个是任意大小。你可能想要的是:

if(row > 0 && col > 0) 
{ 
    doubMatrix = new double[row][col]; 
    makeDoubMatrix(row,col); 
} 
else 
{ 
    doubMatrix = new double[1][1]; 
    makeDoubMatrix(1,1); 
} 

该阵列doubMatrix初始化为大小行*山坳如果行和山口比0 greather,并以1 * 1,否则,然后用它的初始化大小调用makeDoubMatrix(你可以在if-else之后调用这个方法,使用doubMatrix.sizedoubMatrix[0].size,但我认为它现在更具可读性)。

使用相同的推理更改第二个构造函数(其采用二维数组)。

1

你是不是正在初始化doubMatrix。它分配一个值doubMatrix唯一行这注释掉之一:

//this. doubMatrix = doubMatrix; 

(这不会帮助。)

问问你自己,你认为你初始化它 - 在哪里你认为你已经得到的东西,如:

doubMatrix = new double[1][2]; 

...或赋值从另一个阵列复制值:

doubMatrix = someOtherVariable; 

如果你没有分配一个值的任何语句,你初始化它,所以它总是会有null默认值。