不知道IndexOutOfRangeException是什么意思

时间:2017-05-03 18:17:13

标签: c# arrays indexoutofrangeexception

我正在c#中尝试插入排序算法并努力修复此错误消息:

  

" System.IndexOutOfRangeException'发生在algorithmsAssignment.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 个答案:

答案 0 :(得分:1)

在你的第一次迭代中:(i = 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不存在。

干杯

答案 1 :(得分:0)

因为你有这个条件,你会得到i = 1的错误:

 j = i - 1; //j=0 for i=1

和while循环中的错误条件

while (j >= 0 && string.Compare(dataArray[column, j - 1], 
dataArray[j, column]) > 0)

while循环dataArray[column, j - 1]中的这种情况会抛出IndexOutOfRange异常,因为

j-1=-1 for j=0