Ошибка: индекс находится за пределами массива.

Я знаю, о чем говорится в проблеме, но я не понимаю, как моя программа выводит значение, находящееся за пределами массива.

У меня есть массив целых чисел от 0 до 8, что означает, что он может содержать 9 целых чисел, верно? У меня есть int, который проверяется, чтобы убедиться, что входное значение пользователя равно 1-9. Я удаляю единицу из целого числа (вот так)

if (posStatus[intUsersInput-1] == 0) //if pos is empty
{
    posStatus[intUsersInput-1] += 1; 
}//set it to 1

затем я сам ввожу 9 и получаю сообщение об ошибке. Он должен получить доступ к последнему int в массиве, поэтому я не понимаю, почему я получаю сообщение об ошибке. Соответствующий код:

public int[] posStatus;       

public UsersInput()    
{    
    this.posStatus = new int[8];    
}

int intUsersInput = 0; //this gets try parsed + validated that it's 1-9    

if (posStatus[intUsersInput-1] == 0) //if i input 9 it should go to 8?    
{    
    posStatus[intUsersInput-1] += 1; //set it to 1    
} 

Ошибка:

"Index was outside the bounds of the array." "Index was outside the bounds of the array."

person Zain    schedule 11.02.2014    source источник
comment
Если вы хотите 9 элементов, вам нужно new int[9]...   -  person Jon Skeet    schedule 11.02.2014
comment
new int[8] создает массив из 8 элементов, поэтому допустимые индексы равны [0,7].   -  person Lee    schedule 11.02.2014


Ответы (2)


Вы объявили массив, который может хранить 8 элементов, а не 9.

this.posStatus = new int[8]; 

Это означает, что postStatus будет содержать 8 элементов с индексом от 0 до 7.

person M.S.    schedule 11.02.2014

// если я ввожу 9, должно перейти к 8?

Вам все равно придется работать с элементами массива. Вы будете считать 8 элементов при циклическом просмотре массива, но они все равно будут массивом (0) - массивом (7).

person Jason Sgalla    schedule 11.02.2014
comment
он говорит, что intUsersInput-1, поэтому 9 - 1 = 8, так что вам следует перейти к 8-му элементу? - person Zain; 11.02.2014