I 99(2桁の番号)に10からのランダム整数でArrayList<Integer>
を充填コードの一部を有しています。次に、それを(私は違いが何であるかはかなりわからない、または交換ソート、正直に言うと)、配列を反復処理し、バブルソートを使用して、それを並べ替えることになっています。しかし、私が得る出力は本当に変です。添付されているコードとその出力例です。ジャワ:ソートのArrayListが動作していない
import java.util.*;
public class SortingAnArrayList
{
public static void main(String[] args)
{
ArrayList<Integer> al = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 20; i++)
{
int rNum = 10 + r.nextInt(90);
al.add(rNum);
}
System.out.println("ArrayList before: " + al);
ArrayList<Integer> sortedAl = sortArrayList(al);
System.out.println("ArrayList after : " + sortedAl);
}
public static ArrayList<Integer> sortArrayList(ArrayList<Integer> a)
{
boolean loop;
ArrayList<Integer> b = a;
do
{
loop = false;
for (int i = 0; i < a.size() - 2; i++)
{
if (b.get(i) > b.get(i + 1))
{
loop = true;
int temp = b.get(i);
b.remove(i);
b.add(i, b.get(i+1));
b.remove(i+1);
b.add(i+1, temp);
}
}
} while (loop);
return b;
}
}
OUTPUT#1
ArrayList before: [45, 33, 75, 51, 91, 93, 54, 91, 90, 38, 31, 85, 15, 33, 61, 51, 83, 36, 48, 18]
ArrayList after : [93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 18]
OUTPUT 2
ArrayList before: [73, 39, 68, 54, 12, 63, 90, 55, 53, 24, 14, 80, 58, 12, 64, 25, 82, 27, 20, 55]
ArrayList after : [12, 12, 20, 55, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 55]
私はコードで間違っていたところ、非常にわからないよう助けてください。ありがとう!
[カスタムオブジェクトのArrayListをプロパティ別にソートする](0120-18751)をご覧ください。 – Koshinae
こんにちは、私たちはしませんシンプルな "なぜ私のコードは動作していませんか?" Stackoverflowに関する質問。しかし、要素 'i'を'削除 'すると、 'i + 1'は新しい' i'になります。削除したり追加したりする代わりに、 'set'メソッド(' b.set(i、b.get(i + 1)); b.set(i + 1、temp); 'を使います。 – Cephalopod