2016/01/31 公開
・配列の並び替え
配列に格納されている数値をランダムに並び替えるプログラムを紹介します。
ここで紹介する並び替えは、配列と乱数を使って作成しています。Java標準で用意されているCollections.shuffleは使っていません。
以下が並び替えのソースコード例で、1~10の数を並び替えています。乱数を使っているので実行の結果は毎回違います。
Shuffle.java ← クリックしてダウンロードページに移動
001: public class Shuffle { 002: public static void main( String[] args ) { 003: // 配列を定義 004: int[] ary = new int[ 10 ]; 005: 006: // 配列に1からの連番を格納 007: for ( int i = 0; i < ary.length; ++ i ) ary[ i ] = i + 1; 008: 009: // シャフル 010: for ( int i = 0; i < ary.length; ++ i ) { 011: // 0~(配列aryの個数-1)の乱数を発生 012: int rnd = (int)( Math.random() * (double)ary.length ); 013: 014: // ary[ i ]とary[ rnd ]を入れ替える 015: int w = ary[ i ]; 016: ary[ i ] = ary[ rnd ]; 017: ary[ rnd ] = w; 018: } 019: 020: // 結果を表示 021: for ( int i = 0; i < ary.length; ++ i ) 022: System.out.println( ary[ i ] ); 023: } 024: }
Shuffleの出力結果(1回目)
8 6 10 7 3 1 4 9 5 2
Shuffleの出力結果(2回目)
6 7 9 5 10 2 1 3 4 8
ここからは、このソースコードを上から順番に解説していきます。
001: public class Shuffle {
クラス名を、Shuffleとしています。
002: public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003: // 配列を定義 004: int[] ary = new int[ 10 ]; 005: 006: // 配列に1からの連番を格納 007: for ( int i = 0; i < ary.length; ++ i ) ary[ i ] = i + 1;
int型を10個格納できる配列を用意し、その配列に1~10の値を格納しています。
009: // シャフル 010: for ( int i = 0; i < ary.length; ++ i ) { 011: // 0~(配列aryの個数-1)の乱数を発生 012: int rnd = (int)( Math.random() * (double)ary.length ); 013: 014: // ary[ i ]とary[ rnd ]を入れ替える 015: int w = ary[ i ]; 016: ary[ i ] = ary[ rnd ]; 017: ary[ rnd ] = w; 018: }
ary[ i ]と乱数で発生したrndの配列ary[ rnd ]の値を入れ替えます。全配列の値を乱数で発生した配列番号の値と入れ替えることで、まんべんなくシャフルされます。以下の図は、i=0、rnd=6のときの配列の値の変化を表しています。ary[0]とary[6]の値が入れ替わります。
020: // 結果を表示 021: for ( int i = 0; i < ary.length; ++ i ) 022: System.out.println( ary[ i ] );
並び替った配列aryの値を表示しています。
■関連コンテンツ
Javaの配列 | 同じ型の変数をまとめた配列について解説 |
トランプの操作 | トランプを操作するクラス |
神経衰弱 | 1人で神経衰弱 |
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
|
乱数 randomMath.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。 |
|
変数値の交換2つの変数の値を入れ替える方法を紹介しています。 |
|
値の交換クラスクラスを使って2つの変数の値を入れ替える方法を紹介しています。 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |