为什么这并不总是有一个return语句

时间:2015-02-12 21:43:24

标签: java matrix return

private static BigInteger[] matrixPow(BigInteger[] matrix, int n){
    if(n==0){
        BigInteger[] result = {BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE};   
    }
    else{
        BigInteger[] partial = matrixPow(matrix, n/2);
        BigInteger[] result = matrixMultiply(partial, partial);
        if(n%2 == 1){
            result = matrixMultiply(result,matrix);
        }
            return result;
    }

}

是我到目前为止的代码,但编译器说它并不总是返回,但它在else语句中我将不得不改变

2 个答案:

答案 0 :(得分:4)

您应该将return result向上移动一个范围。

private static BigInteger[] matrixPow(BigInteger[] matrix, int n){
    BigInteger[] result;
    if(n==0) {
        result = {BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE};   
    } else {
        BigInteger[] partial = matrixPow(matrix, n/2);
        result = matrixMultiply(partial, partial);
        if(n%2 == 1) {
            result = matrixMultiply(result,matrix);
        }
    }
    return result;
}

这里的根本问题是你的格式化,即缩进是关闭的,这使得很难看到范围的开始和结束。

答案 1 :(得分:1)

返回封装在else块中。

if块的if else部分没有返回,所以当它到达if块时,它不会返回任何内容,因此会出错。