Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DoubleMatrix类中出现空指针异常错误_Java - Fatal编程技术网

Java DoubleMatrix类中出现空指针异常错误

Java DoubleMatrix类中出现空指针异常错误,java,Java,我遇到了java问题。我得到这个错误: 线程“main”java.lang.NullPointerException中出现异常 在DoubleMatrix.getDim1Size(DoubleMatrix.java:28) 位于Program3.main(Program3.java:16) 我不明白它在哪里是空的 public class DoubleMatrix { private double[][] doubMatrix; public DoubleMatrix(in

我遇到了java问题。我得到这个错误: 线程“main”java.lang.NullPointerException中出现异常 在DoubleMatrix.getDim1Size(DoubleMatrix.java:28) 位于Program3.main(Program3.java:16) 我不明白它在哪里是空的

public class DoubleMatrix 
{
    private double[][] doubMatrix; 

    public DoubleMatrix(int firstDim, int secondDim, double upperLimit)
    {
        if(firstDim > 0 && secondDim > 0 && upperLimit > 0){
            firstDim = 1; 
            secondDim = 1;
            upperLimit = 1; 
        }
    }

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

    public int getDim1Size(){
        int firstDim1 = doubMatrix.length; 
        return firstDim1; 
    }
    public int getDim2Size(){
        int secondDim1 = doubMatrix[0].length; 
        return secondDim1;
    }

    private void makeDoubMatrix(int firstDim, int secondDim, double upperLimit){
        double[][] randomMatrix = new double[firstDim][secondDim]; 

        for(int row = 0; row < doubMatrix.length; row++) {
            for(int column = 0; column < doubMatrix[row].length; column++){
                doubMatrix[row][column] = (double)(Math.random() * 100); 
            }
        }

    }
    public DoubleMatrix addMatrix(DoubleMatrix arrayObj)
    {
        if(doubMatrix.length == arrayObj.doubMatrix.length && doubMatrix[0].length == arrayObj.doubMatrix[0].length){
            double[][] TotalTwoDimArray = new double[doubMatrix.length][doubMatrix[0].length];
            for(int row = 0; row < TotalTwoDimArray.length; row++){
                for(int column = 0; column < TotalTwoDimArray[row].length; column++){ 
                    TotalTwoDimArray[row][column] = doubMatrix[row][column] + arrayObj.doubMatrix[row][column]; 
                }
            }
            return new DoubleMatrix(TotalTwoDimArray); 
        }
        return new DoubleMatrix(1, 1, 1); 
    }
    public DoubleMatrix getTransposedMatrix(){
        double[][] TransMatrix = new double[doubMatrix[0].length][doubMatrix.length]; 
        for(int row = 0; row < doubMatrix.length; row++){
            for(int column = 0; column < doubMatrix[row].length; column++){
                TransMatrix[row][column] = doubMatrix[column][row];
            }
        }
        return new DoubleMatrix(TransMatrix); 
    }

    public DoubleMatrix multiplyMatrix(DoubleMatrix obj1)
    {
        if(doubMatrix[0].length == obj1.doubMatrix.length){
            double[][] multipliedMatrix = new double[doubMatrix.length][obj1.doubMatrix[0].length];

            for(int i = 0; i < multipliedMatrix.length; i++){
                for(int j = 0; j < multipliedMatrix[i].length; j++){
                    for(int k = 0; k < doubMatrix[0].length; k++){
                        multipliedMatrix[i][j] = doubMatrix[i][k] * obj1.doubMatrix[k][j] + multipliedMatrix[i][j]; 
                    }
                }
            }
            return new DoubleMatrix(multipliedMatrix); 
        }
        return new DoubleMatrix(1, 1, 1); 
    }
    public void printMatrix(String titles){
        System.out.println(titles);

        for(int row = 0; row < doubMatrix.length; row++){
            for(int column = 0; column < doubMatrix[row].length; column++){
                System.out.printf("%9.1f", doubMatrix[row][column]);
            }
            System.out.println();
        }
    }

}

// main in different class
public class Program3 
{
    public static void main(String[] args)
    {
        DoubleMatrix doubMatObj1; 
        DoubleMatrix doubMatObj2; 
        DoubleMatrix doubMatObj3; 

        int max = 10; 
        int min = 3; 
        int firstDim = (int)(Math.random() * (max - min + 1) + min);
        int secondDim = (int)(Math.random() * (max - min + 1) + min);  

        doubMatObj1 = new DoubleMatrix(firstDim, secondDim, 100.);  
        doubMatObj2 = new DoubleMatrix(doubMatObj1.getDim1Size(), doubMatObj1.getDim2Size(), 100.); 
        doubMatObj3 = doubMatObj1.addMatrix(doubMatObj2); 
        doubMatObj1.printMatrix("First Matrix Object"); 
        doubMatObj2.printMatrix("Second Matrix Object"); 
        doubMatObj3.printMatrix("Result of Adding Matrix Objects"); 
        doubMatObj2.printMatrix("Result of Transposing Matrix Object");
        doubMatObj1.multiplyMatrix(doubMatObj2); 
        doubMatObj3.printMatrix("Result of Multiplying Matrix Objects"); 
    }
}
公共类双矩阵
{
专用双[][]双矩阵;
公共双矩阵(int-firstDim、int-secondDim、双上限)
{
如果(第一个维度>0&&第二个维度>0&&上限>0){
firstDim=1;
secondDim=1;
上限=1;
}
}
公共双矩阵(双[][]临时数组)
{
if(tempArray!=null&&tempArray.length!=0){
for(int i=0;i
在java中,非原语不能通过声明来初始化。因此,如果在
foo.bar()
这样的行中得到
NullPointerException
,您就知道
foo
必须是
null
。在本例中,您有
doubMatrix.length
,这表示
doubMatrix
从未初始化过。查看代码,只有第二个构造函数初始化该变量,因此调用第一个构造函数将使
doubMatrix==null
始终为
true

我希望这些信息足以帮助您自己修复问题(以及将来类似的问题),但我不打算发布一个工作代码示例,因为自己修复代码将是一个很好的练习

另一方面,在第二个构造函数中,您有:

for(int i =0; i < tempArray.length; i++) {
    doubMatrix = tempArray; 
}
for(int i=0;i

例如,如果
tempArray.length
5
,则将相同的值赋给同一变量5次。我不知道你想在那里做什么,但这肯定不是你想的。

doubMatrix
打字错误,还是你故意这么说的?我刚刚注意到一系列其他问题,你的代码没有做到你想的。我哈