配列をランダムに並び替える | Randomly sort the array | Android JAVA

スポンサーリンク

配列の並び替え

配列を並び替える方法としては大まかに2つあります。

①独自に並び替えのコードを書く。

リスト化した上で並び替え

ここでは、②の方法について。

リスト化した上で並び替える

        int[] array = {1,2,3,4,5,6,7,8,9}
        List<Integer> list = new ArrayList<>();
        for (int i : array) {
            list.add(i);
        }
        Collections.shuffle(list);
        for (int i = 0; i < list.size(); i++) {
            array[i] = list.get(i);
        }

List用のCollectionsクラスのshuffleを用います。

一旦、int型配列をInteger型Listに入れ替えます。

その後にshuffleを行い、int型配列に戻します。

一連の流れを確認するサンプルコードは、

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int[] array = {1,2,3,4,5,6,7,8,9};
        String arrayString="";

        for(int i = 0; i < array.length; i++){
            arrayString = arrayString + array[i]+",";
        }
        Log.d("Log0","before :"+arrayString);
        List<Integer> list = new ArrayList<>();
        for (int i : array) {
            list.add(i);
        }
        Collections.shuffle(list);
        arrayString="";
        for (int i = 0; i < list.size(); i++) {
            array[i] = list.get(i);
            arrayString = arrayString + array[i]+",";
        }
        Log.d("Log0","after :"+arrayString);
    }
}

結果は、

D/Log0: before :1,2,3,4,5,6,7,8,9,
D/Log0: after :5,3,7,2,9,4,6,1,8,

ランダムに並び替えができました。

独自の並び替えは、フィッシャー–イェーツのシャッフルなどがあります。

呼び出し番号の並び替え

場合によっては呼び出し番号をランダム化することで目的が解決することもあります。配列を並び替えるべきなのか、呼び出し番号を並び替えるべきなのか。見誤らないようご注意を。

その際は、以下のコードを。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int[] array = {1,2,3,4,5,6,7,8,9};
        Random random = new Random();
        String arrayString = "";
        for(int i = 0; i< 30 ;i++){
            arrayString = arrayString+array[random.nextInt(9)]+",";
        }
        Log.d("Log0","after :"+arrayString);
    }
}

結果は

D/Log0: after :6,3,6,5,1,1,7,8,5,7,2,2,9,4,4,3,4,6,1,5,9,4,2,9,3,9,7,6,8,8,

連続しない乱数についてはこちらを。