3

私は遊んでいて、この小さなコードを書きました。定義された回数コインを投げて、表と裏の数を数えようとしています。だからここにあります:

private void Start_Click(object sender, EventArgs e)
{
    int headss = 0;
    int tailss = 0;
    int random2, g;
    string i = textBox1.Text;
    int input2, input;
    bool NumberCheck = int.TryParse(i, out input2);

    if (textBox1.Text == String.Empty) // check for empty string, when true
        MessageBox.Show("Enter a valid number between 0 and 100000.");
    else // check for empty string, when false
        if (!NumberCheck) // number check, when false
        {
            textBox1.Text = String.Empty;
            MessageBox.Show("Enter a valid number between 0 and 100000.");
        }
        else
        {
            input = Convert.ToInt32(textBox1.Text);

            for (g = 0; g < input; g++)
            {
                Random random = new Random();
                random2 = random.Next(2);

                if (random2 == 0)
                {
                    headss++;
                }
                else if (random2 == 1)
                {
                    tailss++;
                }
            }
        }

    heads.Text = Convert.ToString(headss);
    tails.Text = Convert.ToString(tailss);
}

問題は、コンテンツの表示中に問題が発生し続けることです。彼らが正しい結果を表示するのにはほど遠いです。何か案は?

編集。解決策:次の行を3行上に移動します:D

Random random = new Random();
4

4 に答える 4

7

それ以外の

for (g = 0; g < input; g++)
{
   Random random = new Random();
   random2 = random.Next(2);
}

Random全体で使用する単一を宣言します。

private Random randomGenerator = new Random();
private void Start_Click(object sender, EventArgs e)
{
    // ...
    for (g = 0; g < input; g++)
    {
        random2 = randomGenerator.Next(2);
    }
    // ...
}
于 2011-04-25T05:49:30.370 に答える
4

1 つの Random オブジェクトのみを使用して、適切な (デフォルトの Random と同様に) ランダム シーケンスを生成する必要があります。

于 2011-04-25T05:46:13.833 に答える
3

random のデフォルトのコンストラクターは、systmem 時間をシードとして使用します。したがって、短時間に大量に生成すると、すべて同じ乱数列が生成されます。ループからランダム オブジェクトを引き出すと、この効果は発生しません。

于 2011-04-25T05:48:42.333 に答える