質問

コレクションのシャッフルが正常に機能しない理由がわからないため、非常にイライラしています。

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

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

何らかの理由で、シャッフルメソッドを呼び出すかどうかにかかわらず、要素はまったく同じようにソートされたままになります。何か案は?

役に立ちましたか?

解決

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

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

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

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

他のヒント

クリスの答えは正しい。

Chrisの答えのコメントで述べたように、arraylistを大きくする必要がない限り、基礎となる配列は適切に変更され、リストは新しい配列を作成し、そこに項目をコピーします。

リストへの参照を保持し、Arrays.asList呼び出し後、リストを繰り返し処理します。その後、配列を繰り返し処理せず、代わりにリストを繰り返し処理します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top