6

コレクションのシャッフルが正しく機能しない理由が分からないので、とてもイライラしています。

randomizer配列 をシャッフルしようとしているとしましょう。

int[] randomizer = new int[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

何らかの理由で、シャッフル メソッドを呼び出すかどうかに関係なく、要素はまったく同じように並べ替えられたままになります。何か案は?

4

2 に答える 2

18

Arrays.asListプリミティブの配列では使用できません。代わりにこれを使用してください:

Integer[] randomizer = new Integer[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

プリミティブ型を使用できないという点で、同じ規則がコレクション フレームワークのほとんどのクラスに適用されます。

元のコード ( を使用int[]) は正常にコンパイルされましたが、可変引数メソッドの動作により、意図したとおりに機能しませんでした。配列を唯一のメンバーとしてasList、1 つの要素のリストを作成するだけです。int

于 2008-10-08T00:52:52.603 に答える
0

クリスの答えは正しいです。

クリスの回答に関するコメントで述べたように、配列リストを拡張する必要がない限り、基になる配列は適切に変更され、リストは新しい配列を作成して項目をコピーします。

リストへの参照を保持し、Arrays.asList 呼び出しの後でそれを反復処理し、その後は配列を反復処理せず、代わりにリストを反復処理することをお勧めします。

于 2008-10-08T01:01:43.567 に答える