java - 令人难以置信的 Java 相等测试错误

标签 java algorithm int equals

请看代码说说你的看法 即使在我的调试器上它也显示 102 == 102 给我 false ...你能想象吗?

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

    }

}

最佳答案

您忘记了您是关于递归的 return 语句。您需要使用return exists(intb, k); 来返回递归内可能出现的true,否则如果j.equals(k),代码将始终返回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;
}

关于java - 令人难以置信的 Java 相等测试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003803/

相关文章:

java - 我想为我的桌面应用程序使用 Google Map API

java - 使用 Kotlin 在运行时添加 fragment 会导致 'Unfortunately app has stopped'

python - 为什么我的 Iterative Deepening Depth-First Search 实现占用的内存与 BFS 一样多?

java - 在 String 之前将 int 数组转换为 char

C++ 困境:关于 std::stoi

java - Android - 在 Canvas 上绘制 View

JavaOptional.ofNullable(Object[]objects) 带有流和 boolean 结果

java - 该算法最坏情况下的时间复杂度是多少?

通过最少的移动次数来最小化装满球的桶的最大重量的算法

c - 意想不到的值(value)C结构