За цикл "сломан"? Включает "если bool = true", но я не останавливаюсь на i <int для "еще" - PullRequest
0 голосов
/ 05 февраля 2011

Я столкнулся со странной проблемой, которую не могу решить, что бы я ни пытался. Может быть, я просто упускаю из виду нечто элементарное, но у меня полностью закончились идеи, поэтому я, безусловно, надеюсь, что кто-нибудь сможет мне помочь.

У меня есть цикл for, который не работает должным образом. Интересно, почти идентичный работает просто отлично. Проблема в том, что он не останавливается (по-видимому), когда i

for (int i = GeneralVars.intStartAtLine; i < (GeneralVars.intEndAtLine + 1); i++)
{
    for (int j = 0; j < 49; j++)
        a++;
    if (boolCheck == true)
    {
        for (int j = 0; j < 6; j++)
        {
            if (z[i].zahlen7[j].nummer != 0)
            {
                if ((z[i].zahlen7[j + 1].nummer - z[i].zahlen7[j].nummer) == 1)
                {
                    //dosomestuff
                }
            }
        }
        if (z[i].zahlen7[0].nummer != 0)
        {
            if (a == b)
            {
                //do some stuff
            }
        }
    }
    else
    {
        for (int j = 0; j < 5; i++)
            if ((z[i].zahlen[j + 1].nummer - z[i].zahlen[j].nummer) == 1)
            {
                //dosomestuff
            }
        if (a == b)
        {
           //dosomestuff
        }
    }
}

Итак, проблема возникает в цикле else, как уже упоминалось ранее, если быть точным, исключение IndexOutOfBounds возникает здесь

if ((z[i].zahlen[j + 1].nummer - z[i].zahlen[j].nummer) == 1)

Причина, по которой это происходит, в том, что здесь «я» - 3417, хотя этого не может быть? Я проверил переменные с различными точками останова, Genervars.intEndAtLine всегда равен 3416. i

if (i != 3417)

до и после цикла else, но он все еще входит в него, когда (по какой-либо причине) i = 3417.

Так что - хорошо - я полностью потерян здесь. Заранее благодарим за любую помощь, которую я получу.

Последнее примечание: я новичок здесь и не являюсь носителем английского языка, поэтому, если я допустил какие-либо серьезные ошибки, пожалуйста, прости меня: -)

1 Ответ

8 голосов
/ 05 февраля 2011

Ну

for (int j = 0; j < 5; i++) // are you sure you want to increase i here or should it be j?
{
...
}

Для последнего запуска, я думаю, я == 3416, а когда вы вводите этот цикл во второй раз, я == 3417, и вы получите исключение.

Редактировать: Попробуйте использовать константы вместо магических чисел.Ваш код выглядел бы намного чище.

...