2013-05-08 5 views
0

Мне нужно сделать простое приложение для форм Windows, в котором игрок по очереди поворачивается с компьютером, беря палки (которые я сделал из ярлыков, которые становятся невидимыми), но у меня проблема с кодом для ПК, поскольку это приводит к ошибке «индекс вне диапазона» во время выполнения, и я не могу понять это ..Ошибка выполнения C#: индекс за пределами диапазона

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; 
      } 
     } 

    } 

х случайное число, этикетки является список, содержащий метки

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

заранее спасибо

+0

Установили вы контрольную точку, отслеживал значений г и х, и выяснял, какая строка кода erroring вне дома? Шаг 1 при устранении этой ошибки - это знать, какой индекс массива вы используете, и длину массива. Информацию о контрольных точках см. На http://msdn.microsoft.com/en-us/library/ktf38f66%28v=vs.71%29.aspx – David

ответ

4

Вы получаете исключение Beause вашего сравнения

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++) 
+0

... Я действительно глуп, чтобы не видеть этого, спасибо; теперь появилась еще одна проблема, метки, которые должны исчезнуть, не .. какие-либо идеи по этому поводу? – KGS

1

В C# массивы 0 индексированные, поэтому последний элемент этикетки [labels.Count -1]; Вы должны изменить этот

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

в этом

if (x + i > labels.Count -1) 
    break; 
Смежные вопросы