6

プログラムの出力を 1 または -1 にしようとしていますが、これはこれまでのコードであり、唯一の出力は -1 です。まったくランダムではありません。

Random rnd = new Random();
int L = rnd.Next(0, 1);
if (L == 0)
{
    Console.WriteLine(-1);
}
else
{
    Console.WriteLine(1);
}
4

4 に答える 4

12

2 番目の引数Random.Next(int, int)は、排他的な上限を指定します。つまり、0 以上で 1 未満の整数が必要だと言っているのです。これでは、0 以外の数値には多くの範囲が与えられません :)

ドキュメントから:

戻り値
の 型: System.Int32
minValue 以上で maxValue 未満の 32 ビット符号付き整数。つまり、戻り値の範囲には minValue は含まれますが、maxValue は含まれません。minValue が maxValue と等しい場合、minValue が返されます。

他の一般的な問題を回避するために、ランダム性に関する私の記事もお読みください。

于 2013-11-07T20:53:52.613 に答える
7

rnd.Next(0, 1)i範囲内の値を返します0 <= i < 1。そのような値は だけです0

ドキュメントを見てください:

最小値

タイプ: System.Int32

返される乱数の包括的な下限。

最大値

タイプ: System.Int32

返される乱数の排他的な上限。maxValue は minValue 以上である必要があります。

minValue包括的maxValueであり、排他的であることに注意してください。したがって、より一般的に言えば、このオーバーロードはnext()範囲内の値を返します。

minValue <= i < maxValue 

用語を認識していない場合は、不等式のコンテキストで、包括的手段<=または>=および排他的手段<または>.

上記の不等式は、minValue == maxValue の場合には厳密には当てはまりませんが、より明確な説明のために、その特殊なケースを無視することにしました。

于 2013-11-07T20:54:43.863 に答える
0

プログラムの出力を 1 または -1 にしようとしていますが、これはこれまでのコードであり、唯一の出力は -1 です。まったくランダムではありません。

代わりに単純なアルゴリズムを使用できます。

int L = (rnd.Next (1, 3) * 2) - 3;
Console.WriteLine(L);
于 2013-11-07T21:26:34.570 に答える
0

2 つの引数を持つ Random.Next は値 min <= < max を返します

したがって、値 0 または 1 が必要です。コードを次のように単純に変更します。rnd.Next(0, 2);- これは 0 または 1 を返します。

于 2013-11-07T20:56:54.140 に答える