配列の並び替え
配列を並び替える方法としては大まかに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,
連続しない乱数について
連続しない乱数を取得する | Non-consecutive random numbers | JAVA
ランダムに数を入れ替えたい際などに使用する不連続乱数。通常の方法で乱数を取得すると同じ数値が連続してしまいます。隣り合う数が一致しない不連続の乱数を取得するにはどうしたらよいのか?不連続にするための方法を探ります。