0

まず、これは私が担当しているクラスの宿題に関連していると言わせてください。私は実際に宿題の答えをすでに持っていますが、私は現在プログラマーとして働いているので、オブジェクト指向プログラミングを理解するのを助けるためにさらに一歩進みたいと思いましたが、実際には数回しかやっていなかったので、私の教育にはいくつかのギャップがあります大学での高レベルのプログラミングのクラスでは、私が行ったことのほとんどはアセンブリと c であり、明らかに大きく異なります。

とにかく、宿題のためにバブルソートを書かなければなりませんでした。問題ない。しかし、私はジェネリックについても読んでいて、それをよく理解していなかったので、自分の理解のためにジェネリックなバブルソートを作りたかったのです。

私が理解していることから、ジェネリックを使用する理由は、異なるタイプのデータで同じジェネリック クラスを使用できるようにするためです。

メイン メソッドから doBubbleSort メソッドを呼び出し、int の配列リストを送信します。任意のタイプの配列リストを送信できるようにしたい。

ジェネリック用に更新された私のバブルソートは次のとおりです。

public static<T> ArrayList doBubbleSort(ArrayList<T> arrayList)
{
    boolean wasSwapped;//
    do{
        wasSwapped = false;
        for (int i=1; i<arrayList.size();i++)
        {
            int b = arrayList.get(i-1).compareTo(arrayList.get(i));
            if (b<0)
            {
                int temp = arrayList[i];
                arrayList[i] = arrayList[i-1];
                arrayList[i-1] = temp;
                wasSwapped = true;
            }


        }
    }while (wasSwapped);
    return arrayList;
}

私の人生では、比較ステートメントを適切に使用する方法を理解できません。現在、シンボルが見つかりません - メソッド compareTo(T) 。ここの誰かが私に正しい方向への微調整をしてくれることを望んでいました。

また、ある時点でタイプを指定する必要があることも知っています。メソッド呼び出しでそれを行ってもよいですか、それともメソッド自体で行う必要がありますか。この ArrayList al = Sorting.doBubbleSort(al); のように呼び出すと仮定します。代わりに文字列を並べ替えたい場合は、 ArrayList al = Sorting.doBubbleSort(al); になります。

私の比較を手伝ってください。また、ジェネリックについての私の理解でどこから脱線したかを教えてください. ありがとう

これまでご協力いただきありがとうございました。@LuiggiMendoza と @newaccts の両方の提案を反映するようにコードを変更しました。多くの論争の後、私はそれを機能させ、適切に理解し始めていると思います. 唯一の問題は、temp のジェネリック変数を宣言する方法がわからないことです。今のところ、別の一般的なリストを追加したばかりで、スワップに要素 0 を使用していますが、それはかなり非効率的であるように思われるので、何か提案できるかどうか疑問に思っていました。

    public static<T extends Comparable<? super T>> List<T> doBubbleSort(List<T> list)
    {
        boolean wasSwapped;
        List<T> temp = new ArrayList<>();
         temp.add(list.get(0));

        do{
            wasSwapped = false;
            for (int i=1; i<list.size();i++)
            {
                int b = list.get(i-1).compareTo(list.get(i));
                temp.set(0,list.get(i));
                if (b>0)
                {    
                    list.set(i,list.get(i-1));//list[i] = list[i-1];
                    list.set(i-1,temp.get(0));//list[i-1] = temp;
                    wasSwapped = true;
                }


            }
        }while (wasSwapped);
        return list;
    }

}
4

1 に答える 1