c# - 掷骰子游戏“指数超出范围”
问题描述
作为学校的作业,我必须制作一个 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";
}
}
解决方案
您得到 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);
}
}
推荐阅读
- html - 由于屏幕截图包含文本,文本太小而无法阅读
- html - 模式背景下显示的引导模式对话框
- reactjs - React-csv 没有正确分离数据
- xml - 如何在元素树中修复此 ElementTree.py(1320)XML()
- java - 大家好,我使用 Lottie 动画创建了一个启动画面,我的问题是动画完成后,我如何更改活动?
- angular - 向外部 api 调用发出发布请求时如何以角度修复跨域请求块
- c# - 等待 API 响应时加载页面
- python-3.x - 如何在 hsv 颜色空间中找到红色和黄色颜色的上限和下限?
- c# - MahApps 图标包
- node.js - 使用 express [NODEJS] 发送和接收图像缓冲区