Не знаю, что означает IndexOutOfRangeException
Я пытаюсь вставить алгоритм сортировки в C# и пытаюсь исправить это сообщение об ошибке:
"Исключение System.IndexOutOfRangeException" произошло в алгоритме Assignment.exe "
Как только он достигает цикла while, код прерывается и выдает мне сообщение. Любая помощь будет оценена
(Мне пришлось сделать string.compare, так как я использую строку 2D-массива.
static void insertionSort(int columnSort, bool accendingOrder)
{
int column = columnSort - 1;
int i, j;
for (i = 1; i < dataArray.GetLength(1); i++)
{
string key = dataArray[column, i];
j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && string.Compare(dataArray[column, j - 1],
dataArray[j, column]) > 0)
{
dataArray[column, j + 1] = dataArray[column, j];
j = j - 1;
}
dataArray[column, j + 1] = key;
}
}
2 ответа
В вашем первом для итерации: (я = 1)
string key = dataArray[column, i];
j = i - 1;
// J value is 0
while (j >= 0 && string.Compare(dataArray[column, j - 1], //Here, j - 1 = -1, since j = 0
....
....
Могу поспорить, что ваш индекс находится вне диапазона, поскольку индекс -1 не может существовать.
ура
Вы получите ошибку для i=1, потому что у вас есть следующие условия:
j = i - 1; //j=0 for i=1
и неправильное условие в цикле
while (j >= 0 && string.Compare(dataArray[column, j - 1],
dataArray[j, column]) > 0)
это условие в то время как цикл dataArray[column, j - 1]
будет бросать IndexOutOfRange
исключение, потому что
j-1=-1 for j=0