Java实现列表升序排序时出现System out of bound错误咨询
问题根源
- 单次插入操作多次增加
itemcount:当前逻辑里for循环每执行一次,不管走if还是else分支都会执行itemcount++,但一次insert操作只应该让itemcount加1,多次累加很快会让索引超过数组长度,触发System out of bound错误。 - 插入排序逻辑错误:不需要每次比较都修改数组值和提前插入x,正确逻辑是先从后往前遍历,把所有比x大的元素依次后移一位,找到最终插入位置后再把x写入,最后统一更新
itemcount。 - 缺少数组满容校验:插入前没有判断当前元素数量是否已经等于数组长度,满容时继续插入也会触发越界。
- 输出逻辑不严谨:原main方法直接遍历整个数组长度,若数组未插满会输出多余的默认值0。
修复后代码
public class Lists { int [] lists; int itemcount; public Lists(int l) { lists = new int[l]; itemcount = 0; } public void insert(int x) { // 数组满容校验 if(itemcount == lists.length) { System.out.println("数组已满,无法插入新元素"); return; } // 空数组直接插入 if(itemcount == 0) { lists[itemcount] = x; itemcount++; return; } int i; // 从后往前遍历,仅后移比x大的元素 for(i = itemcount - 1; i >= 0 && lists[i] > x; i--) { lists[i+1] = lists[i]; } // 写入待插入元素 lists[i+1] = x; // 单次插入仅更新一次计数 itemcount++; } public static void main(String[]args) { Lists s = new Lists(5); s.insert(9); s.insert(4); s.insert(6); s.insert(5); s.insert(8); // 按实际插入的元素数量遍历输出 for (int i = 0; i < s.itemcount; i++) { System.out.print(s.lists[i] + " "); } // 输出结果:4 5 6 8 9 } }
内容的提问来源于stack exchange,提问作者Zeina Mohamed
相关产品推荐
相关产品推荐

