我正在使用数组,需要对数组进行排序.这个数组一直显示超出范围的异常
本文关键字:数组 显示 一直 排序 范围 异常 | 更新日期: 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方法的重载与自定义比较。