Не знаю, что означает 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
Другие вопросы по тегам