我正在使用数组,需要对数组进行排序.这个数组一直显示超出范围的异常

本文关键字:数组 显示 一直 排序 范围 异常 | 更新日期: 2023-09-27 18:09:47

我已经建立了一个数组和一个显示数组的大文本框。基本上,你输入一个名字,4个季度的销售数据,它就会计算出全年的销售额。我现在从排序按钮开始。这将对给定的列号从多到少进行排序。我得到了一个if语句,看起来它应该适用于第五列(总列)。我一直得到一个超出范围的例外,我不知道为什么。有什么想法吗?我确信这是一个我没有看到的简单问题。

do {
    swapFlag = false;
    for (n=0; n < lastIndexUsed; n++)
    {
         if (quarters[n, sortCol] < quarters[n+1, sortCol])
         {
             //Column 5
             temp = quarters[n,5];
             quarters[n,5] = quarters[n +1, 3];
             quarters[n +1, 3] = temp;
             //swapflag
             swapFlag = true;
         }
    }
} while (swapFlag);
下面是sortCol: 如何得到0-5的示例
if (rbRegion.Checked)
    sortCol = 0;
if (rb1.Checked)
    sortCol = 1;
if (rb2.Checked)
    sortCol = 2;
if (rb3.Checked)
    sortCol = 3;
if (rb4.Checked)
    sortCol = 4;
if (rbTotal.Checked)
    sortCol = 5;

按钮变量:

int n;
int temp;
int sortCol = 0;
string ntemp;
bool swapFlag;

全局变量
int lastIndexUsed = -1;
int[,] quarters = new int[10, 5];
string[] Branch = new string[10];

我正在使用数组,需要对数组进行排序.这个数组一直显示超出范围的异常

quarters定义为

int[,] quarters = new int[10, 5];

由于数组是从零开始的,因此在第二维上给出了索引0...4,但您试图访问索引5:

temp = quarters[n,5];

在我看来,你可以有n =四分之一。Size - 1,因此n + 1 = quaters.size。所以它超出了数组的边界

我觉得问题出在这些:

quarters[n+1, sortCol]
quarters[n+1, 3]

确保n+1是有效的索引。如果lastIndexUsed本身是最大有效索引怎么办?那么n+1会导致IndexOutOfRangeException

我建议使用更多的List<int> quartersSortCol0实例并使用if (rbRegion.Checked) quartersSortCol0.Sort(),避免像上面的"while-for"那样无效的结构。虽然您可以使用Sort方法的重载与自定义比较。