3
ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

たとえば、これらの 3 つの数字を arraylist で取得し、そのうちの 1 つをランダムに取得したいとします。そんなことがあるものか?

4

5 に答える 5

18

Random クラスを使用してこれを行う 1 つの方法:

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Random r = new Random();
System.out.println(lista.get(r.nextInt(lista.size())));

またはシャッフルを使用します。

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Collections.shuffle(lista);
System.out.println(lista.get(0));
于 2013-10-13T15:43:19.337 に答える
8

を使用して、ランダム インデックスとして使用Randomする を生成できます。int

Random rand = new Random();
Integer randomInt = lista.get(rand.nextInt(lista.size()));

ここでは、とrand.nextInt(lista.size())の間のランダムなインデックスを生成します。0size - 1

参照:
Random#nextInt(int)

この乱数ジェネレーターのシーケンスから引き出された、 0 (含む) と指定された値 (含まない)の間の均一に分散された疑似乱数の int 値を返します。

于 2013-10-13T15:41:48.473 に答える
1

アイデアは、新しいランダム インデックスを生成し、そのランダム インデックスを使用して配列からラドム数を取得することです。

そのために

  1. which を使用して乱数を生成します。0.0Math.random()以上 1.0 未満の正符号の double 値を返します。
  2. リストの開始インデックスと終了インデックスの間に収まるようにランダム値を調整します。リストのインデックスは整数であるため、double 値にリストのサイズを掛けて整数に変換することでこれを行います。

これにより、次のコードが得られます。

int randomIndex = (int)(Math.random() * lista.size());

System.out.println(lista.get(randomIndex));

ここで生成される乱数は真のランダムではなく、疑似乱数ジェネレーターを使用して生成されることに注意してください。これは、日常的な使用のほとんどに十分です。

興味があれば、ここでPRNGの詳細を読むことができます:)

于 2013-10-13T16:00:47.743 に答える
0

リスト内の要素数にランダムを使用し、それをインデックスとして使用しました。

于 2013-10-13T15:41:40.800 に答える