所以我想创建一个方法,从两个给定的数组中,他输出一个长度最小的方法但该方法总是要求在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;
}
}
答案 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;
}