Подтвердить что ты не робот

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

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

У меня есть массив ints, который равен 0 - 8, что означает, что он может содержать 9 ints, правильно? У меня есть 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 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."
4b9b3361

Ответ 1

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

this.posStatus = new int[8]; 

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

Ответ 2

public int[] posStatus;       

public UsersInput()    
{    
    this.posStatus = new int[9]; //It means postStatus will contain 9 elements from index 0 to 8.   
}

int intUsersInput = 0;   

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

Ответ 3

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

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

Ответ 4

   string dob1 = drUserInfo["dtpDateOfBirth"].ToString();
   DateTime dtt = DateTime.ParseExact(dob1, "MM-dd-yyyy", CultureInfo.InvariantCulture);
   string  date = dtt.ToString("yyyy-MM-dd");
   txtDOB.Text = date;