1

いくつかのランダムなboolean値を生成する必要があります。

ただし、true100 回の呼び出しで正確に 10 を取得する必要があります。また、true値をほぼ均一に分散する必要があります (たとえば、2 番目trueは 9falseの後に、3 番目は 7falseの後に来るなど)。java.util.RandomnextBoolean()メソッドを使用してこれを実装しようとしtrueましたが、最初は値が過密になるようです。誰でも助けることができますか?

4

4 に答える 4

4

層化サンプリング手法を実装するコードを次に示します。

boolean[] get10in100() {
    boolean[] result = new boolean[100];
    Random rand = new Random();
    for (int i = 0; i < 10; ++i) {
        result[10 * i + rand.nextInt(10)] = true;
    }
    return result;
}
于 2013-03-10T04:41:30.140 に答える
0

ランダム性をどのように定義するかによって異なります...ここに1つの可能性があります:

boolean[] ranbool = new boolean[100];
Random rng = new Random();
for (int i = 0 ; i < 10 ; i++)
    ranbool[rng.nextInt(100)] = true;

//以下は冗長です

for (int i = 0 ; i < 100 ; i++)
    System.out.print ((ranbool[i]) ? "X" : "O");
System.out.println();
于 2013-03-10T04:44:50.527 に答える
0

N のうち K 個の true を正確にランダムにしたい場合は、K 個の true と NK 個の true の配列を作成し、コレクションでシャッフル メソッドを使用してランダム化することができます。

List<Boolean> values = new ArrayList<Boolean>();
for (int i = 0; i < 10; i++) {
  values.add(true);
}
for (int i = 0; i < 90; i++) {
  values.add(false);
}

Collections.shuffle(values);

文字通り10程度ごとに間隔を空けて配置したい場合は、代わりにTedの答えを使用してください。ただし、説明から本当にそれが必要かどうかは不明です.

于 2013-03-10T04:49:35.387 に答える