1

我对 Windows Phone 和 C# 也有所了解。我发现我的 Coloring() 函数中有一个 IndexOutOfRangeException:

public void Coloring()
    {
        szinek_base.Add(Color.FromArgb(255, 0, 171, 169));
        szinek_base.Add(Color.FromArgb(255, 140, 191, 38));
        szinek_base.Add(Color.FromArgb(255, 160, 80, 0));
        szinek_base.Add(Color.FromArgb(255, 230, 113, 184));
        szinek_base.Add(Color.FromArgb(255, 240, 150, 9));
        szinek_base.Add(Color.FromArgb(255, 27, 161, 226));
        szinek_base.Add(Color.FromArgb(255, 229, 20, 0));
        szinek_base.Add(Color.FromArgb(255, 51, 153, 51));
        int remove;
        Color szin = new Color();
        Random generator = new Random();
        List<int> lapok = new List<int>();
        for (int l = 0; l < 16; l++)
        {
            lapok.Add(l);
        }

        for (int i = 0; i < 8; i++)
        {   
                szin = szinek_base[generator.Next(0, szinek_base.Count)]; 

                remove = lapok[generator.Next(0, lapok.Count)]; 
                szinek[remove] = szin;
                lapok.Remove(remove);
                szinek_base.Remove(szin);

                remove = lapok[generator.Next(0, lapok.Count)];
                szinek[remove] = szin;
                lapok.Remove(remove);
                szinek_base.Remove(szin);
        }
    }

使用 try-catch 我还发现第二个 for() 循环包含错误。但是,如果我将块分成一半并使用 try-catch,它不会发现错误,也不会在第一部分中找到第二部分。顺便说一下,这段代码在 Windows 7 下作为记忆游戏的一部分运行良好,我没有想法。感谢您的帮助,并对语法和其他错误感到抱歉,我还不知道 StackOverflow 协议。

编辑:忘了提,主命名空间包含它们:

public List<Color> szinek_base = new List<Color>();
Color[] szinek = new Color[8];
4

3 回答 3

4

从评论和后来的编辑:

szinek它似乎是一个包含 8 个元素的数组,但lapok是一个包含 16 个元素的列表。

lapok.Count被传递给 Random 构造函数的第二个参数时,这意味着它可能会生成大于 8 的值,并且确实会引发IndexOutOfRangeException

于 2012-04-10T10:35:08.400 回答
3

编辑

我很抱歉,最初的答案是不正确的。正如 Adrian 强调的那样,由于使用了不正确的列表计数属性来突出显示可移动项目,因此引发了异常。

于 2012-04-10T10:08:54.093 回答
1

请忽略我之前的回答。我找到了实际问题...

您可以根据随机变量设置删除,该随机变量可以在 0 到 16 之间的任意位置。

然后,您尝试从 szinek 中删除元素“remove”,该元素可能只有 8 号。

于 2012-04-10T10:38:18.043 回答