これは宿題(またはインタビューの質問ですか?)のようです。その場合、Javaコレクションオブジェクトの組み込みメソッドではなく配列を使用する必要があります(実際にはそうでない場合でも)。答えはFisher-Yates Shuffle algorithm
現代インプレースシャッフルは
です。
To shuffle an array a of n elements (indexes 0..n-1):
for i from n − 1 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
(私は確認する必要がありますが、これはJavaがフードのshuffle()
メソッドで使用しているものと思われます)。
編集、それはアルゴリズムを実装するのも楽しいですので: Javaで
、これは次のようになります。
public static void main(String[] args) {
int[] a = new int[15];
for (int i = 1; i <= 15; i++)
{
a[i-1] = i;
}
Random rg = new Random();
int tmp;
for (int i = 14; i > 0; i--)
{
int r = rg.nextInt(i+1);
tmp = a[r];
a[r] = a[i];
a[i] = tmp;
}
for (int i = 0; i < 15; i++)
System.out.print(a[i] + " ");
System.out.println();
}
そして...これはさらにALGOのインサイドアウトバージョンを使用して最適化することができます既知の一連の数値をランダムな順序で挿入したいからです。 ArrayList
を作成し、の配列にコピーアウトするなどの余分なコピーがないので、あなたがしたいことを達成するための最良の方法は次のとおりです。
a = new int[15];
Random rg = new Random();
for (int i = 0; i < 15; i++)
{
int r = rg.nextInt(i+1);
a[i] = a[r];
a[r] = i+1;
}
そして、あなたがしたいことはありますか? –
いいえ、それ以外の場合は投稿しません:p – gieldops
問題は、コンパイル時エラー、例外、エラーメッセージ、間違った結果(入力、出力、期待通りの出力)、結果はありません... –