0

配列のソートに使用したのと同様のアルゴリズムを実装して、ArrayList をソートしようとしています。Collects.sort を使用できることはわかっていますが、まだ初心者なので、コードを書いて学習したいと思います。配列リストに格納されている 2 つの整数オブジェクトの値を比較します。これは、このメソッドへの参照を介して引数として渡されるスコア配列を含む私のコードです。現在、このコードは正しくソートされていませんが、配列のすべての添え字に最小の数値を挿入しています。余談ですが、プリミティブではなくオブジェクトを比較しているため、インデックス j と最小インデックスのスコアを比較する方法に興味がありました。キャストよりも優れたソリューションになると思います。ありがとうございました!

        int smallest;
    for (int i = 0; i < 5; i++)
    {
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        {
            if ((Integer) scores.get(j) < (Integer) scores.get(smallest))
                smallest = j;
        }

        int temp = (Integer) scores.get(i);
        int swap = (Integer) scores.get(smallest); 
        scores.add(i, swap);
        scores.add(smallest, temp);

    }
4

1 に答える 1

0

現在、このコードは正しくソートされていませんが、配列のすべての添え字に最小の数値を挿入しています。

要素を置き換えるset()代わりにメソッドを使用する必要があります。add()

余談ですが、プリミティブではなくオブジェクトを比較しているため、インデックス j と最小インデックスのスコアを比較する方法に興味がありました。キャストするよりも良い解決策だと思います。

のようなコレクションの explit タイプを指定することで、キャストを簡単に回避できますnew ArrayList<Integer>

すべてをまとめると、修正されたコードは次のようになります。

    ArrayList<Integer> scores = new ArrayList<Integer>();
    scores.add(5);
    scores.add(4);
    scores.add(2);
    scores.add(1);
    scores.add(3);
    System.out.println(scores);
    int smallest;
    for (int i = 0; i < scores.size(); i++)
    {
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        {
            if (scores.get(j) < scores.get(smallest))
                smallest = j;
        }

        int temp = scores.get(i);
        int swap = scores.get(smallest);
        scores.set(i, swap);
        scores.set(smallest, temp);

    }
    System.out.println(scores);
于 2013-09-21T20:15:52.717 に答える