首页 > 解决方案 > 掷骰子游戏“指数超出范围”

问题描述

作为学校的作业,我必须制作一个 Windows 窗体应用程序,它会掷出 6000 次“骰子”,并告诉我它掷了多少次 1、2、3、4、5 和 6。

这是我现在拥有的代码,但我不工作。我得到的错误是:

System.IndexOutOfRangeException:“索引超出了数组的范围。”

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

标签: c#winforms

解决方案


您得到 aSystem.IndexOutOfRangeException因为您初始化randomNumbers为 6 个元素的数组,并且您的迭代器迭代到 6000 并且正如@LarsTech 在评论中所说,您不需要 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);
    }
}

推荐阅读