音楽シャッフルクイズ

またもや結城さんに釣られる。
http://www.hyuki.com/d/200510.html#i20051020190000
といいつつ、ビール飲んだので考えられず。プログラムにYesかNoかを考えてもらう。


import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class ShuffleQuiz {
static Random random = new Random();

public static void main(String[] args) {
Map counters = new HashMap();
int[] musicSource = { 1, 2, 3, 4, 5 };
for (int i : musicSource) {
counters.put(new Integer(i), new int[musicSource.length]);
}

// イパーイ繰り返す
for (int i = 0; i < 100000; i++) {
int[] music = new int[musicSource.length];
System.arraycopy(musicSource, 0, music, 0, musicSource.length);
shuffle(music);
// 何番目になったかをカウント
for (int j = 0; j < music.length; j++) {
// 曲ごとのカウンターを取得
int[] counter = (int[]) counters.get(new Integer(music[j]));
// 順番ごとのカウンターをカウントアップ
counter[j]++;
}
}
for (int musicSourceElement : musicSource) {
int[] counter = (int[]) counters
.get(new Integer(musicSourceElement));
System.out.print("Music No." + musicSourceElement + ": ");
for (int count : counter) {
System.out.print(count + ",");
}
System.out.println();
}
}

static void shuffle(int[] music) {
for (int i = 0; i < music.length; i++) {
int r = random.nextInt(music.length);
int m = music[i];
music[i] = music[r];
music[r] = m;
}
}
}

5曲で100000回繰り返した結果、

Music No.1: 20124,19883,19986,19839,20168,
Music No.2: 24224,17873,18559,19461,19883,
Music No.3: 21103,22990,17334,18686,19887,
Music No.4: 18234,20754,22936,17970,20106,
Music No.5: 16315,18500,21185,24044,19956,

ランダムにはなってないように見えますね・・・