计数排序问题


public static void countingSort(Integer[] a, int n) {
//TODO
//COMPLETE THIS METHOD
int[] counter = new int[n+1];
int[] sorted = new int[a.length];
Arrays.fill(counter,0);
// fills counter array with each number count
for ( int i = 0 ; i < a.length; i++){
counter[a[i]] += 1;
} // adds n-1 index + n index
for (int i = 1; i < counter.length; i++) {
counter[i] = (counter[i] + counter[i-1]);
} // shifts array to the right
for (int i = counter.length-1; i > 0; i--) {
counter[i] = counter[i-1];
} // fills sorted array with the sorted out counts
for (int i = 0; i < a.length; i++ ){
sorted[counter[a[i]]] = a[i];
counter[a[i]]++;
}
}

当运行时,它在第一个for循环的主体中抛出一个数组越界异常。我很难看到它,如果有人能帮我指路,我将不胜感激。

当运行时,它在循环的第一个。

应该是这样的:

for ( int i = 0 ; i < a.length; i++){
counter[a[i]] += 1;
}

如果有人能帮忙的话,我很难看到它请引导我,我将不胜感激。

循环中的ArrayIndexOutOfBoundsException只能表示您超出了acounter的界限。从检查中可以清楚地看出,您没有超过a的界限(尽管您可以通过切换到增强的for循环来消除这种可能性并使代码更干净(。剩下的唯一可能性是你已经超过了counter的界限。

您实现的方法只支持输入数组中的非负整数,并要求方法调用程序将元素值的上界作为第二个参数传递。如果这些约束没有得到满足,那么将抛出您所观察到的异常。

也就是说,如果异常被抛出到您所说的位置,那么问题就出在输入上。

相关内容

  • 没有找到相关文章

最新更新