我正在为学校写作业(我们准备在剩下的课上写作业),但是遇到了问题。运行该程序时出现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。
答案 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);