3

今、私はしばらくこれに取り組んでおり、エラーが発生しています。現在、私が作成しているプログラムはアドレス帳であり、挿入ソートを使用して、ブック (アドレスエントリ) と呼ぶオブジェクトの配列リストをソートしています。ソーターが適切にソートされていないことがすぐにわかったので、ソーターをテストする簡単なプログラムを作成しましたが、再び機能しません。皆さんがそれを見て、私を助けてくれるかどうか疑問に思っていました.

これが私のソーターです:

import java.util.ArrayList;
public class Sorts {

    /**
     * Sorts and array of integer from low to high
     * pre: none
     * post: Integers has been sorted from low to high
     */
    public static void insertionSort(ArrayList<String> test) {
        Comparable temp;
        int previousIndex;
        ArrayList<String> objectSort = test;

        for (int i = 1; i < objectSort.size(); i++) {
            temp = objectSort.get(i);
            previousIndex = i - 1;

            while ((objectSort.get(previousIndex).compareTo((String) temp)) == 1 && (previousIndex > 0)) {
                objectSort.set(previousIndex + 1, objectSort.get(previousIndex));
                previousIndex -= 1; //decrease index to compare current item with next previous item
            }
            if (objectSort.get(previousIndex).compareTo((String) temp) == 1) {
                /* shift item in first element up into next element */
                objectSort.set(previousIndex + 1, objectSort.get(previousIndex));
                /* place current item at index 0 (first element */
                objectSort.set(previousIndex, (String) temp);
            } else {
                /* place current item at index ahead of previous item */
                objectSort.set(previousIndex + 1, (String) temp);
            }

        }
    }
}

それをテストするための私の簡単なプログラムは次のとおりです。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args){
        ArrayList<String> test = new ArrayList<String>();

        test.add("Roxy");
        test.add("Proxy");
        test.add("Moxy");
        test.add("Samuel Adams");

        Sorts.insertionSort(test);

        System.out.println(test);

    }

}

要約すると、ArrayList ソーターに問題があります。問題は、正しくソートされず、その理由がわかりません。よろしくお願いします。ご不明な点がございましたら、お気軽にお問い合わせください。:)

4

1 に答える 1

8

compareTo最初の問題: 「より大きい」に対して常に 1 を返すことを期待しています。0 より大きい値を返すだけで、別の正の整数である可能性があります。したがって、両方の== 1比較は> 0.

にも問題があるかもしれませんが、それは私が最初に見たものです。

于 2012-06-18T21:49:36.190 に答える