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
只能表示您超出了a
或counter
的界限。从检查中可以清楚地看出,您没有超过a
的界限(尽管您可以通过切换到增强的for
循环来消除这种可能性并使代码更干净(。剩下的唯一可能性是你已经超过了counter
的界限。
您实现的方法只支持输入数组中的非负整数,并要求方法调用程序将元素值的上界作为第二个参数传递。如果这些约束没有得到满足,那么将抛出您所观察到的异常。
也就是说,如果异常被抛出到您所说的位置,那么问题就出在输入上。