当前位置: 首页 > 知识库问答 >
问题:

变量可能未在二维数组中初始化

江温书
2023-03-14

我有一个静态矩阵结果和静态矩阵添加方法以及一个静态矩阵显示(用于打印结果),我在主函数中编写了一个测试示例。

我的目标是:我想用这两种静态方法乘和加两个矩阵。

我得到这些错误"变量C和d可能没有被初始化"。有人能告诉我,问题是什么吗?

public class Matrixmultadd {

    static double[][] matrixMult(double[][] A,double[][] B) {
        double[][] C; //declar this variable for return the result
        //return null if on of matrix are null
        if(A == null || B == null){
            return null;
        }


        if(A[1].length == B.length){ //check to be equal columns of A with rows of B
            for(int n = 0;n < A.length;n++){//n is numbers of rows of A
                for(int k = 0;k < B[n].length;k++){
                    C[n][k] = 0.0;
                     for(int l = 0;l < A[n].length;l++){//row n of A multiple in column k of B
                        C[n][k] += A[n][l] * B[l][k];

                    }
                }

            }
        return C;
        } else {
        return null;
        }

    }


    static double[][] matrixAdd(double[][] a,double[][] b) {

    //check the rows and columns of a and b are equal
        if(a.length == b.length && a[1].length == b[1].length){
            double[][] d; //declar this variable for return the result
            for(int n = 0;n < b.length;n++){
                for(int m = 0;m < b[1].length;m++){
                    d[n][m] = a[n][m] + b[n][m];
                }
            }
            return d;
        }else {
            return null;
        }

    } 


    static void matrixDisplay(double[][] a){

        for(int i = 0; i < a.length;i++){
            for(int k = 0;k < a[1].length;k++){
                System.out.print(a[i][k] + "\t");
            }
        System.out.println();
        }

    }

public static void main(String[] args){
    double[][] A = {{1,2,3},{4,5,6}}; 

    double[][] B= {{1,2},{3,4},{5,6}};

    double[][] d;
    d = matrixMult(A,B);
    matrixDisplay(d);
}

}

共有3个答案

柴文林
2023-03-14

由于在matrixMult方法中有条件语句,因此可能永远不会满足该条件。那么你的声明呢

 double[][] C;

可能永远不会初始化,这将导致错误

return C;

因此,您可以通过初始化它来修复它。

 double[][] C = new double[length][length]; // your actual dimensions

此外,if语句中缺少C数组的分配语句。不能为未初始化的数组赋值。

章高朗
2023-03-14

您应该在使用变量C和d之前初始化它们,因为Java将数组视为对象,并且它们是在堆内存中分配的。

double[]C=新的双精度[A.length][B[1]。长度]

double[]d=新的双精度[a.length][b[1]。长度]

苏品
2023-03-14

你必须初始化那些变量。在你的情况下,它会是这样的:

对于C-双[][]C=新的双[A。长度][B。长度];

对于d双精度[][]d=新双精度[a.length][b.length];

    static double[][] matrixMult(double[][] A,double[][] B) {
        double[][] C = new double[A.length][B.length]; //declar this variable for return the result
        //return null if on of matrix are null
        if(A == null || B == null){
            return null;
        }


        if(A[1].length == B.length){ //check to be equal columns of A with rows of B
            for(int n = 0;n < A.length;n++){//n is numbers of rows of A
                for(int k = 0;k < B[n].length;k++){
                    C[n][k] = 0.0;
                     for(int l = 0;l < A[n].length;l++){//row n of A multiple in column k of B
                        C[n][k] += A[n][l] * B[l][k];

                    }
                }

            }
        return C;
        } else {
        return null;
        }

    }


    static double[][] matrixAdd(double[][] a,double[][] b) {

    double[][] d = new double[a.length][b.length]; //declar this variable for return the result
    //check the rows and columns of a and b are equal
        if(a.length == b.length && a[1].length == b[1].length){
            for(int n = 0;n < b.length;n++){
                for(int m = 0;m < b[1].length;m++){
                    d[n][m] = a[n][m] + b[n][m];
                }
            }
            return d;
        }else {
            return null;
        }

    } 


    static void matrixDisplay(double[][] a){

        for(int i = 0; i < a.length;i++){
            for(int k = 0;k < a[1].length;k++){
                System.out.print(a[i][k] + "\t");
            }
        System.out.println();
        }

    }

public static void main(String[] args){
    double[][] A = {{1,2,3},{4,5,6}}; 

    double[][] B= {{1,2},{3,4},{5,6}};

    double[][] d;
    d = matrixMult(A,B);
    matrixDisplay(d);
}

}
 类似资料:
  • 问题内容: 我得到错误: TestCounter.java:115:变量计数器可能尚未初始化counters [i] = new Counter(i); 而且我不知道如何解决它。我知道我的课程“” 有效。下面是我的代码,如果您可以看一下,我将非常高兴。此代码包装在类的main方法中。 问题答案: 您尚未创建数组,只是声明了变量。 您需要这样做: 或类似的东西

  • 我创建了包含构造函数和toString方法的类主管。但是,当我试图打印数组的索引时,出现了一个错误,“变量svArray可能尚未初始化。我该如何解决这个问题?”?

  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 所以我已经在结果中声明了相关字符串的值,但是它仍然说我的变量“result”可能还没有初始化。 我正在尝试实现与此类似的输出。任何人都可以帮我吗?谢谢!

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 在最后一行显示为时出错 :::: 变量结果可能尚未初始化 这是我的代码: