如何修复IndexOutOfRangeException

时间:2019-01-28 14:34:31

标签: c#

我正在为学校写作业(我们准备在剩下的课上写作业),但是遇到了问题。运行该程序时出现IndexOutOfRangeException错误,我不知道为什么要得到它。

        Random rnd = new Random();
        string strNumDice = tbxNumDice.Text;
        int[] numDice = new int[int.Parse(strNumDice)];
        int numSides = int.Parse(tbxNumSides.Text);
        int trgNumber = int.Parse(tbxTarget.Text);
        int sum = 0;
        //int numTries = 0;
        int var2 = 0;

        if (int.Parse(strNumDice) * (numSides) >= trgNumber)
        {
            while (var2 != trgNumber)
            {
                tbxResult.AppendText("\n");
                sum = 0;
                foreach (int numberOfDice in numDice)
                {
                    numDice[numberOfDice] = rnd.Next(1, numSides+1);
                    tbxResult.AppendText(numDice[numberOfDice].ToString() + " ");
                    sum += numDice[numberOfDice];
                    //numTries++;
                }
                tbxResult.AppendText("\n");
                tbxResult.AppendText("The new sum is" + sum.ToString());
                var2 = sum;
            }
        }

如果我决定掷出6个d6,并且不希望目标和为36,它将继续这样做直到达到36。

1 个答案:

答案 0 :(得分:0)

错误在这里:

foreach (int numberOfDice in numDice)
{
    numDice[numberOfDice] = rnd.Next(1, numSides+1);

这是javascript foreach循环的方式:您获取数组的索引。 C#为您提供实际元素的,而不是索引。在修改实际的数组元素时,您需要一个for循环,而不是foreach循环,如下所示:

for(int i = 0; i<numDice.Length; i++)
{
     numDice[i] = rnd.Next(1, numSides+1);