DEV Community

Wael El-Sayegh
Wael El-Sayegh

Posted on

how to fix Index was outside the bounds of the array error?

i am trying to access an array elements and make some Logic gates operations over it, so basically i am trying to get the neighbors of each element, but i am getting the error, Index was outside the bounds of the array error.. thats one of my conditional if statements, and i know i am trying to access an element which is not exist either less than 0 element position or bigger than or = array.length

                if (states[i] == 0 && states[i + 1] == 0)
                {
                    states[i] = 0;
                }

any idea how to fix it?

Latest comments (6)

Collapse
 
katnel20 profile image
Katie Nelson

If you are intentionally accessing something outside the array, put the code in a try/catch block:

try {
    // put code here
}
catch(IndexOutOfRangeException ex)
{
    // handle error here
}
Collapse
 
waelelsayegh1 profile image
Wael El-Sayegh

Nope, it is not intentionally the purpose here is only to check the element neighbors only

Collapse
 
peledzohar profile image
Zohar Peled

Never attempt to catch an IndexOutOfRangeException when using arrays. This exception can be avoided simply by making sure your index is within the range - which in arrays means larger than -1 and smaller than array.Length.

For more information, read Eric Lippert's blog post entitled Vexing Exceptions

Collapse
 
peledzohar profile image
Zohar Peled • Edited

I don't get this code. You're setting the array cell to 0 if it is 0 - why?

Collapse
 
waelelsayegh1 profile image
Wael El-Sayegh

to check the neighbors of the element in the array

Collapse
 
peledzohar profile image
Zohar Peled • Edited

this line states[i] = 0; doesn't make sense inside this condition, because you already know that the value in states[i] is 0.

And as for the exception - if you know i is smaller than the array's length, it means that i+1 must be equal to the array's length to throw that exception - so, guessing that this i is a for loop variable, you need the loop to stop one step before - so for(var i = 0; i < arr.Length - 1; i++) {/* do stuff here */}