【发布时间】:2018-10-04 15:45:46
【问题描述】:
您好,我很难在 java 中实现计数排序方法。我相信问题来自我在方法中的最后两个循环。我收到了一个 ArrayIndexOutOfBounds 异常:8。我相信这来自我倒数第二个 for 循环,当索引 5 处的值为 8 但我不知道如何解决这个问题。任何帮助表示赞赏。谢谢!
在我的代码中,k 是输入数组中的最大值。
代码:
public static void main(String[] args) {
int [] arrayOne = {0,1,1,3,4,5,3,0};
int [] output = Arrays.copyOf(arrayOne, arrayOne.length);
System.out.println(Arrays.toString(arrayOne));
countingSort(arrayOne, output, 5);
System.out.println(Arrays.toString(output));
}
public static void countingSort(int[] input, int[] output , int k){
int [] temp = Arrays.copyOf(input, k+1);
for (int i = 0; i <= k; i++){
temp[i] = 0;
}
for (int j = 0; j <= input.length - 1; j++){
temp[input[j]] = temp[input[j]] + 1;
}
for (int i = 1; i <= k; i++){
temp[i] = temp[i] + temp[i-1];
}
for (int j = input.length; j >= 1; j--){
output[temp[input[j]]] = input[j];
temp[input[j]] = temp[input[j]] - 1;
}
}
【问题讨论】:
-
尝试将
for (int i = 1; i <= k; i++)更改为for (int i = 0; i < k; i++) -
for (int j = input.length; j >= 1; j--) 也可能需要改为 for (int j = input.length -1; j >= 1; j --)
-
感谢您的回复!这并不能解决越界异常,我在最后一个 for 循环第二行中得到了这个异常。第一个 for 循环用于将 temp 数组中的每个值初始化为 0。
-
请查看我更新的答案中的代码,它应该可以工作!
标签: java arrays indexoutofboundsexception counting-sort