我必须制作一个简单的Windows窗体应用程序,其中播放器轮流使用计算机取棒(我用不可见的标签制作),但我遇到了pc的代码问题,因为它导致运行时错误“索引超出范围”,我无法弄清楚..
private void pcTake(int x)
{
textBox1.Text = "I take " + x;
for (int i = 0; i < labels.Count; i++)
{
if (labels[i].Visible == false && labels[i + 1].Visible == true)
{
while (x > 0)
{
if (x + i > labels.Count)
break;
labels[i + x].Visible = false;
x--;
}
break;
}
}
}
x 是一个随机数, 标签是包含标签的列表
foreach (Control c in this.Controls)
{
if (c is Label)
{
labels.Add(c);
c.Enabled = true;
}
}
提前致谢
答案 0 :(得分:4)
由于您的比较,您将获得例外
labels[i + 1].Visible == true
因为您的循环基于< labels.Count
,这意味着当循环索引达到count - 1
时,您的条件是假设检查count
上的数组索引(因为i + 1
}),因为数组的索引是基于0的,所以你得到了异常。
如果你想检查当前索引和后来的索引,那么你的循环条件应该是i < labels.Count - 1
,如:
for (int i = 0; i < labels.Count - 1; i++)
答案 1 :(得分:1)
在C#中,数组是0索引的,所以最后一项是labels [labels.Count-1];你应该改变这个
if (x + i > labels.Count)
break;
进入这个
if (x + i > labels.Count -1)
break;