我的计数排序程序始终报Index 9 out of bounds for length 9错误求助
问题分析与解决
你的数组索引越界错误出在这段代码:
for (int i=0;i<count.length;i++) count[numbers[i]]++;
这里循环条件是遍历count数组的长度(你的例子里是26),但numbers数组只有9个元素(索引范围0到8),当i走到9的时候,numbers[i]就会超出数组范围,触发Index 9 out of bounds for length 9错误。
正确的做法是遍历**原数组numbers**的长度,因为我们要统计的是原数组中每个元素的出现次数,而非count数组的长度。
修正后的完整代码
import java.util.*; class Main { public static void countingSort(int numbers[]) { int largest = Integer.MIN_VALUE; for (int i = 0; i < numbers.length; i++) { largest = Math.max(largest, numbers[i]); } int count[] = new int[largest + 1]; System.out.println(count.length + "= length\n"); // 修正:遍历原数组numbers的长度 for (int i = 0; i < numbers.length; i++) count[numbers[i]]++; int j = 0; for (int i = 0; i < count.length; i++) { while (count[i] > 0) { numbers[j] = i; j++; count[i]--; } } for(int i = 0; i < numbers.length; i++) System.out.println(numbers[i]); } public static void main(String args[]) { int numbers[] = {5,8,7,19,25,4,2,3,1}; countingSort(numbers); } }
额外说明
计数排序的核心逻辑是:先统计原数组中每个元素的出现次数,再根据count数组的统计结果把元素回填到原数组。你之前的错误属于循环边界的逻辑混淆,只要调整统计次数的循环遍历范围就能解决问题。
内容的提问来源于stack exchange,提问作者Kdey
相关产品推荐
相关产品推荐

