Перевернуть проблему с монетой - PullRequest
1 голос
/ 25 апреля 2011

Я играл и написал этот маленький кусочек кода. Я пытаюсь перевернуть монетку определенное количество раз, а затем посчитать, сколько у меня хвостов и голов. Итак, вот оно:

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);
}

Проблема в том, что у меня постоянно возникают проблемы с отображением контента. Это даже не близко к отображению правильного результата. Есть идеи?

EDIT. Решение: переместить следующую строку на 3 строки вверх: D

Random random = new Random();

Ответы [ 4 ]

5 голосов
/ 25 апреля 2011

вместо

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);
    }
    // ...
}
4 голосов
/ 25 апреля 2011

Вы должны использовать только один объект Random для генерации хорошей (так же хорошо, как и по умолчанию) случайной последовательности.

2 голосов
/ 25 апреля 2011

Конструктор по умолчанию для случайного числа принимает время системы в качестве начального числа.Поэтому, если вы генерируете их много за короткий промежуток времени, все они будут генерировать одинаковую последовательность случайных чисел.Вытащите случайный объект из цикла, и этот эффект не произойдет.

0 голосов
/ 20 января 2018

С RandomGenerator. Этот код будет подсчитывать, сколько раз монета была подброшена. Это закончится с 3 последовательными ГОЛОВАМИ.

private RandomGenerator rgen = new RandomGenerator ();

public void run () {

    int value = 0;
    int total = 0;
    while (value != 3) {
        String coinFlip =  rgen.nextBoolean() ? "HEADS" : "TAILS";
        println (coinFlip);
        if (coinFlip == "HEADS") {
           value+=1;
        } else {
           value=0;
        }
        total +=1;
    }
    println ("It took "+total+" flips to get 3 consecutive heads");     
}
...