0

我必须制作一个简单的 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是一个随机数, labels是一个包含标签的列表

foreach (Control c in this.Controls)
        {
            if (c is Label)
            {
                labels.Add(c);
                c.Enabled = true;
            }
        }

提前致谢

4

2 回答 2

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++)
于 2013-05-08T04:50:50.530 回答
1

在 C# 中,数组是从 0 开始索引的,所以最后一项是 labels[labels.Count-1]; 你应该改变这个

if (x + i > labels.Count)
    break;

进入这个

if (x + i > labels.Count -1)
    break;
于 2013-05-08T04:52:20.933 回答