1

As an assignment for school I have to make a Windows Forms Application which throws a "dice" 6000 times and tells me how many times it threw 1, 2, 3, 4, 5 and 6.

This is the code I have right now, but I doesn't work. The error I get is:

System.IndexOutOfRangeException: "Index was outside the bounds of the array."

Random rand = new Random();

int[] randomNumbers = new int[6];
private void btnBereken_Click(object sender, EventArgs e)
{
  for (int i = 0; i < 6000; i++)
  {
    Console.WriteLine("Element " + i + " is " + (randomNumbers[i] = rand.Next(1,7)));
    int number = rand.Next(1, 7);
    randomNumbers[number - 1]++;

    if (randomNumbers[i] == 1)
    {
      randomNumbers[1] += 1;
    }
    else if (randomNumbers[i] == 2)
    {
      randomNumbers[2] += 1;
    }
    else if (randomNumbers[i] == 3)
    {
      randomNumbers[3] += 1;
    }
    else if (randomNumbers[i] == 4)
    {
      randomNumbers[4] += 1;
    }
    else if (randomNumbers[i] == 5)
    {
      randomNumbers[5] += 1;
    }
    else if (randomNumbers[i] == 6)
    {
      randomNumbers[6] += 1;
    }
  }
  for (int n = 1; n < 7; n++) {
    lblThrow.Text += "Value " + n +  " is " + randomNumbers[n].ToString() +" times thrown" + "\n";
  }
}
Slaven Tojić
  • 2,945
  • 2
  • 14
  • 33
HenkdeTank
  • 29
  • 2

1 Answers1

1

You get a System.IndexOutOfRangeException because you initialized randomNumbers as an array of 6 elements, and your iterator iterates to 6000 and as @LarsTech said in the comments you don't need the If-Block:

Random rand = new Random();
int[] randomNumbers = new int[6];

private void btnBereken_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 6000; i++)
    {
        randomNumbers[rand.Next(1, 7) - 1]++;
    }

    for (int i = 0; i < randomNumbers.Length; i++)
    {

        lblThrow.Text += String.Format("{0}Number {1} is rolled {2} times{3}", 
                         Environment.NewLine, i + 1, randomNumbers[i], 
                         Environment.NewLine);
    }
}
Slaven Tojić
  • 2,945
  • 2
  • 14
  • 33