0

特定のキーで最初と最後の要素を見つける必要があります (二分探索法を使用)。searchFirst メソッドは既に完了していますが、searchLast メソッドを完了することができません。機能する場合と機能しない場合があります(探している値によって異なります)。それが問題です。

テキストファイルから読み取るタイムスタンプ、名前、製品などの属性を持つデータクラスがあります。データ配列の入力が完了したら、配列をマージソートでソートします。

次に、特定の名前で配列の最初と最後の要素が必要です。

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

バグが見つからないかもしれません...助けてくれるかもしれません...コードが最後のバグを見つけることもあれば、そうでないこともあります...

4

1 に答える 1

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;
    }
于 2013-04-23T19:30:54.383 に答える