最小长度数组

时间:2016-03-03 13:08:34

标签: java arrays methods

所以我想创建一个方法,从两个给定的数组中,他输出一个长度最小的方法但该方法总是要求在if语句之外返回

public static int[][] SmallestArray(int[][] A, int[][] B){
    if(A.length < B.length){
        if(A[0].length <B[0].length)
            return A;
    }
    else if(B.length < A.length){
        if(B[0].length <A[0].length)
            return B;
    }
}

3 个答案:

答案 0 :(得分:0)

代码中有未覆盖的路径。这意味着有些情况下您的方法执行完成而没有遇到return语句。但是,既然你声明你的方法返回int[][],那就必须在某处返回。

以下是没有return语句的路径:

public static int[][] SmallestArray(int[][] A, int[][] B){
    if(A.length < B.length){
        if(A[0].length <B[0].length){
            return A;
        }
        //possibly here
    }
    else if(B.length < A.length){
        if(B[0].length <A[0].length){
            return B;
        }
        //possibly here
    }
    //definitely here!
    //in this case A and B have the same length.
    //You have return an int[][], which one will it be?
}

答案 1 :(得分:0)

您的代码不涵盖某些情况。

例如:(B.length == A.length)不受管理。

你必须发表其他一些陈述。

public static int[][] SmallestArray(int[][] A, int[][] B){
    if(A.length < B.length){
        if(A[0].length <B[0].length){
            return A;
         } else {
            //  uncovered case
         }
    }
    else if(B.length < A.length){
        if(B[0].length <A[0].length){
            return B;
         } else {
            //  uncovered case
         }
    }
    else {
       //  uncovered case
    }
}

一个好的做法是在方法结束时只有一个return语句。

public static int[][] SmallestArray(int[][] A, int[][] B){

    int[][] result = null ;
    // do the job
    return result;
}

答案 2 :(得分:0)

您违反了if else范例。

顶级if else应返回不属于您的值。您将从顶级条件中的子条件(如果条件多一个)返回值,并且编译器期望从顶级条件或方法结束返回类型。

你可以通过以下两种方式实现它:

1.)
public static int[][] SmallestArray(int[][] A, int[][] B){ if(A.length < B.length){ if(A[0].length < B[0].length) return A; } else if(B.length < A.length){ if(B[0].length < A[0].length) return B; } return null;
}
2.)
public static int[][] SmallestArray(int[][] A, int[][] B){ if(A.length < B.length){ if(A[0].length < B[0].length) return A; return B; // return from top level if } else if(B.length < A.length){ if(B[0].length < A[0].length) return B; return A; // return from top level else } return null;
}