令人难以置信的Java同等测试错误

时间:2014-11-18 20:53:07

标签: java algorithm int equals

请查看代码并告诉我您的意见 即使在我的调试器上,它显示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

    }

}

1 个答案:

答案 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;
}