2

私はC#、RandomVariableUniformeのクラスを持っています。このクラスには次のメソッドがあります: (Max と Min はフィールド max と min を変更するためのプロパティです)

public double runif(ref Random randomNumber)
{
    double number;

    number = Min + randomNumber.NextDouble() * (Max - Min);
    Console.Write("number = {0,6:F3}    ", number);
    return number;
}

メインファイルには次のものがあります: (ここで、A[i] と A[j] は、配列に保存された、最大値と最小値が異なる上記のクラスのオブジェクトです。)

int n = 5;
double[] x = new double[n];
double[] y = new double[n];
Random randomNumber = new Random();
for (int cont = 0; cont < n; cont++)
{
    x[cont] = A[i].runif(ref randomNumber);
    y[cont] = A[j].runif(ref randomNumber);
    Console.WriteLine("\nx[cont] = {0,6:F3}   y[cont] = {0,6:F3}", x[cont],   y[cont]);
}//end for

ただし、メソッドが疑似乱数を正しく生成している間、プログラムは最初の呼び出しのみを保存しています。出力は次のとおりです。

number = 509,986    number = 470,079
x[cont] = 509,986   y[cont] = 509,986
number = 507,614    number = 418,733
x[cont] = 507,614   y[cont] = 507,614
number = 432,070    number = 463,316
x[cont] = 432,070   y[cont] = 432,070
number = 446,716    number = 476,604
x[cont] = 446,716   y[cont] = 446,716
number = 440,344    number = 459,617
x[cont] = 440,344   y[cont] = 440,344

なぜこれが起こっているのですか?

前もって感謝します。

4

1 に答える 1

6

フォーマット文字列が最初の引数を 2 回参照しています。

これを変える:

Console.WriteLine("\nx[cont] = {0,6:F3}   y[cont] = {0,6:F3}", x[cont], y[cont]);

に:

Console.WriteLine("\nx[cont] = {0,6:F3}   y[cont] = {1,6:F3}", x[cont], y[cont]);
                                                     ^

また、補足として、refinは必要ありref Random randomNumberません。あなたの場合は何もしません。

于 2013-10-10T15:50:49.613 に答える