You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:06:04