0

forループで条件として数値を生成するときに観察したこの問題があります。私はこれを私のAndroidプログラムで使用しています。

私がこれを行うとき:

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}

いつも100以下しか出ない

しかし、私がこれを行うとき:

for (int i = 0; i < 10; i++) {
    temp += new Random().nextInt(1000) + " ";
}

0 から 999 までの真の乱数を取得しました。

実際に何が起こっているのですか?

私はこれを行うことができることを知っています:

int x = new Random().nextInt(1000);
for (int i = 0; i < x; i++) {
    temp += i + " ";
}

そして、これは 0 から 999 までの乱数を返します。しかし、最初のコードが 100 以下の数値しか返さない理由を理解したいだけです。

4

7 に答える 7

4
for (int i = 0; i < new Random().nextInt(1000); i++) { // here upper limit of i will change time to time.
    temp += i + " ";
}

.

for (int i = 0; i < 10; i++) { // here i increase up to   10
    temp += new Random().nextInt(1000) + " ";
}

.

int x = new Random().nextInt(1000); // here x is random but this will never change while for loop is running
for (int i = 0; i < x; i++) {
    temp += i + " ";
}
于 2013-07-23T10:42:42.953 に答える
3

このコードでは

for (int i = 0; i < new Random().nextInt(1000); i++) {
     temp += i + " ";
}

変数 i は、ループの反復ごとに 1 ずつインクリメントされますが、i<100 の特定の時点で、「i」より小さい数値がランダムに生成される可能性があり、ループが終了します。

于 2013-07-23T10:41:15.800 に答える
2

Java Doc は次のように述べています。

0 (0 を含む) と指定された値 (0 を含まない) の間の一様分布の疑似乱数の int 値を返します。

そのため、 i の値が によって生成されたランダムよりも大きくなる可能性がnextInt()あり、ループが終了します。

新しい Random を作成しnextInt(1000)ていると、 for ループの反復ごとに使用して生成されるため、ループの固定値は得られず、変化し続け、出力も変化します。

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) { //new random nextInt() called on each iteration
    temp += i + " ";
}

注:私のプログラムはまで実行されました64

于 2013-07-23T10:43:42.007 に答える
1

あなたの最初の実装...

for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}

new Random().nextInt(1000)ループを終了する時が来たかどうかを判断するために、すべての反復の最後に呼び出しています。同じコードを次のように書き直すことができます。

int i = 0;
while (i < new Random().nextInt(1000)) {
    temp += i + " ";
    i++;
}

...としてよりよく説明されるかもしれません

int i = 0;
while (true) {
    if (i < new Random().nextInt(1000)) {
        break;
    }
    temp += i + " ";
    i++;
}

の値iは常に増加していますが、比較対象の数値new Random().nextInt(1000)は常に変化しています。あなたの比較はこのように見えるかもしれません...

if (0 < 981) break;
if (1 < 27) break;
if (2 < 523) break;
if (3 < 225) break;
if (4 < 198) break;
if (5 < 4) break;

上記の例では、 への最初の呼び出しがnew Random().nextInt(1000)whopping を返して981いますが、ループは 5 回しか発生しません。これは、6 回目の反復の開始時に がnew Random().nextInt(1000)返され、これがの現在の値4よりも小さいためです。5i

お役に立てれば!

于 2013-07-23T10:46:57.110 に答える
0

ここ

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
        temp += i + " ";
    }

i は 100 より大きいかもしれませんが、確率的には事実上不可能です。うん!

于 2013-07-23T10:44:27.327 に答える
0

「最初の for ループ」は 100 未満の数値を出力する場合がありますが、常にではありません。0 から Random.nextInt(1000) メソッドによって返される乱数までの一連の数値が得られます ....

1番目と3番目のループ方法は同じように機能します...

しかし、2 つ目は 0 から 999 までの 9 つの乱数を選択し、答えは次のようになります (373 472 7 56 344 423 764 722 554 800)

于 2013-07-23T11:08:50.700 に答える