private int[] list = {1,2,3,4,5,6,7,8,9};
このリストからランダムに一意の番号を取得するには、どのコードを使用する必要がありますか。私が初心者である最も簡単な方法を教えてください。助けてくれてありがとう。
宣言を次のように変更します。
private Integer[] list = {1,2,3,4,5,6,7,8,9};
変数はprivate
次のとおりなので、クラスの任意のメソッドで実行します。
List<Integer> l = Arrays.asList(list);
Collections.shuffle(l);
これにより、すべてのリストがランダムに再分類されるため、必要な処理が実行されます。
list
呼び出しから返されるリストはArrays.asList
内部で配列を使用するため、元の配列にも影響することに注意してください。
シャッフルを実行してから、シャッフルされた結果に配置された順序で番号を選択することをお勧めします。
Integer[] list = {1,2,3,4,5,6,7,8,9};
Collections.shuffle(Arrays.asList(list));
これらの種類のシナリオで使用される一般的なアルゴリズムindex
は、random number modulo length of the array
以下のコードのようなものを試すことができます:
public static boolean empty(Integer[] list){
for(int i = 0;i<list.length;i++){
if(list[i] != null){
return false;
}
}
return true;
}
public static void main(String[] args){
Integer[] list = {1,2,3,4,5,6,7,8,9};
Random r = new Random();
int index = 0;
while(!empty(list)){
index = r.nextInt(list.length);
if(list[index] != null){
System.out.println(list[index]);
list[index] = null;
}
}
}
これにより、0からリストの最後のインデックスまでのランダムな整数が生成され、nullでない場合はそのインデックスでアイテムが出力され、そのアイテムがnullになります。静的関数'empty'は、配列内のすべてのアイテムがnullであるかどうか(つまり、すべてのアイテムが表示されているかどうか)を確認します。'empty'がtrueを返すと、'while'ループは終了します。'int'の代わりに'Integer'型が使用される理由は、'int'変数をnullにすることはできないのに対し、'Integer'変数はnullにすることができるためです。
'empty'関数は、一度に1つのインデックスで配列を検索し、null以外のインデックスが見つかった場合は、すぐにfalseを返します。これは時間節約のメカニズムであり、関数が不要な検索を実行しないことを意味します。そのループが完全に完了すると、null以外のエントリが見つからなかったことがわかるため、trueが返されます。