请查看代码并告诉我您的意见 即使在我的调试器上,它显示102 == 102,这给了我错误的...你能想象吗?
import java.util.Arrays;
/**
* Created by Idris on 18/11/14.
*/
public class codingGame {
static boolean exists(int[] ints, int k) {
Integer j = ints[ints.length/2];
if (j.equals(k)){
return true;
}
if (ints.length == 1) return false;
if (k > j ) {
int[] intb = Arrays.copyOfRange(ints, ints.length/2, ints.length);
exists(intb, k);
}
if (k < j ) {
int[] intb = Arrays.copyOfRange(ints, 0, ints.length/2);
exists(intb, k);
}
return false;
}
public static void main (String[] args) {
int[] ints = {-9, 14, 37, 102};
System.out.println(exists(ints, 102)); // true
System.out.println(exists(ints, 36)); // false
}
}
答案 0 :(得分:5)
你忘记了return
关于递归的陈述。您需要使用return exists(intb, k);
来返回递归中可能出现的true,否则如果j.equals(k)
为false,代码将始终返回false。
static boolean exists(int[] ints, int k) {
Integer j = ints[ints.length/2];
if (j.equals(k)){
return true;
}
if (ints.length == 1) return false;
if (k > j ) {
int[] intb = Arrays.copyOfRange(ints, ints.length/2, ints.length);
return exists(intb, k);
}
if (k < j ) {
int[] intb = Arrays.copyOfRange(ints, 0, ints.length/2);
return exists(intb, k);
}
return false;
}