0

重複の可能性:
繰り返しのない乱数配列

私は多くの要素を含む文字列配列を持っています(まだアプリケーションを終了していないので、正確な数はわかりません)、おそらく約200です。この配列のランダムな要素を20個取得したいのですが、ランダム要素は1回だけ発生します。たとえば、これらの20個の要素に5番目の要素(たとえば)を2回入れたくない場合などです。これどうやってするの?

4

3 に答える 3

1

Javaだと思います。
そうであれば、次のようなことができます。

public void getRandomElementsOfArray(String[] array)
{
    int maxLength = 200; // Insert length of your array
    int[] usedRandoms;
    String[] randomElements = String[20];
    int random = new Random().nextInt();

    for(int i = 0; i<21; i++) // Loops are NOT my strongest point. you'd better check this
    {
        while(random > maxLength || random < 0 || !Arrays.asList(usedRandoms).contains(random)) // Loop while random is smaller then 0 (the smallest index) or bigger then the length of your array or already used
        {
            random = new Random();
        }


        randomElements[i] = array[random];
        usedRandoms[i] = random;
    }
}
于 2012-04-09T12:09:03.793 に答える
0

かなり直接的な戦略に従うことをお勧めします。すでに選択したセット要素が必要です。状況によっては、文字列配列のサイズがXの場合、HashSetが適切な場合があります。

  • 0からX-1までの要素を選択してください
  • 選択したセットに含まれているかどうかを確認します。含まれている場合は、最初からやり直します。
  • 選択したセットに追加します
  • 十分な要素を選択した場合は、それ以外の場合は最初からやり直してください。
于 2012-04-09T12:12:11.980 に答える
0

以下のコードを見つけて乱数を生成します

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {

public static final void main(String... aArgs){
log("Generating 10 random integers in range 0..99.");

//note a single Random object is reused here
Random randomGenerator = new Random();
for (int idx = 1; idx <= 10; ++idx){
  int randomInt = randomGenerator.nextInt(100);
  log("Generated : " + randomInt);
}

log("Done.");
}

 private static void log(String aMessage){
System.out.println(aMessage);
}
}
于 2012-04-09T12:13:06.673 に答える