开发者

For loop "broken"? Includes "if bool = true" but i doesn't stop at i < int for "else"?

开发者 https://www.devze.com 2023-02-08 10:24 出处:网络
I\'ve come across a weird problem which I can\'t solve, no matter what i tried. Maybe I\'m just overlooking something elemental but I\'ve completely run out of ideas so I certainly hope anybody can he

I've come across a weird problem which I can't solve, no matter what i tried. Maybe I'm just overlooking something elemental but I've completely run out of ideas so I certainly hope anybody can help me.

I have a for-loop which doesn't work properly. Interesting enough, an almost identical one works just fine. The problem is, that it doesn't stop (apparently) when i < int but instead keeps going which (of course) throws an IndexOutOfBounds exception at an Array. I'm bad at explaining this I guess so i'll just "let the code speak": [NOTE: I edited out method calls and other stuff which - I can assure - has nothing to do with the problem, to make the code more readable]

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

So, the problem occurs in the else-loop, as 开发者_开发知识库mentioned before, to be precise, the IndexOutOfBounds exception occurs here

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

The reason why it happens is, because 'i' here is 3417, although it can't be? I checked the variables with various break points, Genervars.intEndAtLine is always 3416. i < GeneralVars.intEndAtLine + 1 should never reach 3417, yet it does. I also tried a simple work-around for testing purposes by adding the line

if (i != 3417)

before and after the else-loop, yet it STILL enters it when (for whatever reason), i = 3417.

So - well - I'm completely lost here. Thanks in advance for any help I'll receive.

Last Note: I'm new here and I'm not a native english speaker, so in case I did any big mistakes, please forgive me :-)


Well

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

For the last run, I guess i == 3416 and when you enter this loop for the second time, i == 3417 and you get the exception.

Edit: Try to use constants instead of magic numbers. Your code would look much cleaner.

0

精彩评论

暂无评论...
验证码 换一张
取 消