2012-04-10 70 views
1

我对Windows Phone和C#也有所了解。我发现有一个 IndexOutOfRangeException在我着色()函数:IndexOutOfRangeException - Windows Phone(C#)

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我还发现,第二个为()循环包含错误。 但是,如果我分成一半的块和使用try-catch,它不会发现错误,也不在第一部分 既不是第二个。这段代码在windows 7下工作正常,顺便说一句,我没有想法。 感谢您的帮助,对于语法错误和其他错误感到抱歉,我还没有意识到StackOverflow协议。

编辑:忘了提,主要的命名空间包含其中:

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

您应该检查异常堆栈跟踪。这将确切地告诉你问题出在哪里。 – ColinE 2012-04-10 10:08:09

+1

什么是szinek? – 2012-04-10 10:17:35

回答

4

从评论和后编辑:

szinek它似乎是8个元件的阵列,但lapok是16个元素的列表。

lapok.Count传递给随机构造函数的第二个参数,这意味着它可能会产生一些大于8,这将不提高IndexOutOfRangeException

+2

是的,这是问题,谢谢! – sifear 2012-04-10 10:38:37

3

编辑

我道歉,最初的答案是不正确的。正如Adrian强调的那样,抛出异常是因为使用了不正确的列表数属性来突出显示可移动项目。

+2

我不明白一件事。当count为8时,生成器会生成0到7之间的值,为什么需要生成0到6之间的值,这就是Count-1会做的事情? – 2012-04-10 10:20:56

+1

@ThePower无论如何谢谢你的努力! – sifear 2012-04-10 11:05:23

1

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

您可以设置基于一个随机变量,可以在任何地方16之间0和

你再尝试删除元素从szinek“删除”,这可能是只能去除大小为8.

+1

是的,这是问题,谢谢! – sifear 2012-04-10 10:40:28