Search code examples
c#coin-flipping

Flip a coin problem


I have been playing around and wrote this little piece of code. I am trying to flip a coin defined number of times and then count how many tails and heads I am getting. So here it is:

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

The problem is that I keep getting problems while displaying the content. It's not even close to display they right result. Any ideas?

EDIT. Solution: move following line 3 lines up :D

Random random = new Random();

Solution

  • Instead of

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

    Declare a single Random for use throughout:

    private Random randomGenerator = new Random();
    private void Start_Click(object sender, EventArgs e)
    {
        // ...
        for (g = 0; g < input; g++)
        {
            random2 = randomGenerator.Next(2);
        }
        // ...
    }