如何通过特定键查找数组中的最后一个元素

时间:2013-04-23 19:13:52

标签: java arrays find key

我必须通过特定键(使用二进制搜索方法)找到第一个和最后一个元素。我已经完成了searchFirst方法,但我无法完成searchLast方法。有时它有时它不起作用(它取决于我正在寻找的价值)并且就是问题。

我有一个Data类,其中包含一些属性,如时间戳,名称,产品等,它们是从文本文件中读取的。当我完成填充数据数组时,我使用合并排序对数组进行排序。

然后我需要特定名称的数组的第一个和最后一个元素。

searchFirst方法工作正常,但searchLast不会做我想要的。

这是searchLast方法的代码(n是他应该寻找的值,目前不使用w)。

public static int searchLast(Data[] array, String n, String w) {
        int left = 0;
        int right = array.length - 1;
        int m = -1;

        while (left < right) {
            m = (left + right) / 2;
            if (array[m].getName().compareTo(n) > 0) {
                right = m - 1;
            } else {
                left = m + 1;
            }
        }

        if (m >= 0) {
            if (array[right].getName().equals(n)) {
                return right;
            }
        }

        return NO_KEY;
    }

我找不到这个错误也许你可以帮助我...有时候代码找到最后一个有时它不会...

1 个答案:

答案 0 :(得分:0)

public static int searchLast(Data[] array, String n, String w) {
        int left = 0;
        int right = array.length - 1;
        int m = -1;
        int found = -1;

            while (left < right) {
                m = (left + right) / 2;
                if (array[m].getName().compareTo(n) > 0) {
                    right = m - 1;
                } else if (array[m].getName().compareTo(n) < 0){
                    left = m + 1;
                } else {
                    found = m;
                    left = m + 1;
            }

        return found;
    }