Java程序无法编译:缺少返回语句

Java程序无法编译:缺少返回语句,java,compiler-errors,Java,Compiler Errors,我正在努力学习java,这是我第一次在这里问问题。 我的程序不会编译,因为这个方法中缺少一个return语句,但我似乎找不到哪里出错了 static double[][] matrixPow(double[][] matrixA, int e) { if (e == 0) { double [][] I = new double[matrixA[0].length][matrixA.length]; for (int k = 0; k < matr

我正在努力学习java,这是我第一次在这里问问题。 我的程序不会编译,因为这个方法中缺少一个return语句,但我似乎找不到哪里出错了

static double[][] matrixPow(double[][] matrixA, int e) {

    if (e == 0) {
        double [][] I = new double[matrixA[0].length][matrixA.length];
        for (int k = 0; k < matrixA.length; k++) {
            I[k][k] = 1;
        }
        return I;
    } else if ((e % 2) == 0) {
        return matrixPow( matrixMult(matrixA, matrixA), e/2);
    } else if ((e % 2) == 1) {
        return matrixMult(matrixA, matrixPow(matrixA, (e - 1)));
    }
}

该方法假定计算一个矩阵为整数e的幂。

错误消息明确指出,至少有一个分支没有返回语句。在这种情况下,if和else if都不会触发

这种情况在现实生活中是不可能发生的,但编译器不知道这一点,也没有办法弄清楚。只要将最后一个else-if分支转换为else,一切都应该正常。

您使用的是else-if语句,如果所有语句都失败,则没有返回语句。您需要在函数末尾或else块中返回一些内容


这个方法应该总是返回一个值。根据Java规范,在最终的else之后,如果不可能达到这个值,您需要一个return语句
static double[][] matrixPow(double[][] matrixA, int e) {

 //Einheitsmatrix
 if (e == 0) {
  double[][] I = new double[matrixA[0].length][matrixA.length];
  for (int k = 0; k < matrixA.length; k++) {
   I[k][k] = 1;
  }
  return I;
 }
 //Der eine Kram
 else if ((e % 2) == 0) {
  return matrixPow(matrixMult(matrixA, matrixA), e / 2);
 }
 //der andere Kram
 else if ((e % 2) == 1) {
  return matrixMult(matrixA, matrixPow(matrixA, (e - 1)));
 }
 // we return null in case every other cases fails.
 return null
}