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

冒泡排序Java代码抛出ArrayIndexOutOfBoundsException异常求修复(升序)

数组排序越界异常解决方案

异常原因

数组索引从0开始,你的数组长度为6,最大有效索引是5。原代码内层循环条件j < nums.length会让j取到5,此时访问nums[j+1]即nums[6],超出数组范围,触发ArrayIndexOutOfBoundsException。

基础修复代码

将内层循环的终止条件改为j < nums.length - 1,避免访问超出数组边界的索引:

public class Main {

    public static void main(String[] args){

        int nums[] = {9,8,4,5,6,7};
        int temp=0;

        for(int i=0;i<nums.length;i++){
            // 修改内层循环终止条件,防止j+1越界
            for(int j=0;j<nums.length - 1;j++){
                if(nums[j]>nums[j+1]){                    //swap
                    temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
        }

        for(int i=0;i<nums.length;i++){          //print array after sorting
            System.out.print(nums[i]+"-->");
        }
    }
}

优化版冒泡排序

原代码是基础冒泡排序,存在不必要的重复比较。可以做两处优化,提升排序效率:

public class Main {

    public static void main(String[] args){

        int nums[] = {9,8,4,5,6,7};
        int temp=0;
        boolean swapped; // 标记本轮是否发生交换

        for(int i=0;i<nums.length;i++){
            swapped = false;
            // 每轮只比较到未排序的最后一个元素,减少重复比较
            for(int j=0;j<nums.length - 1 - i;j++){
                if(nums[j]>nums[j+1]){
                    temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                    swapped = true;
                }
            }
            // 本轮无交换说明数组已完全有序,提前终止循环
            if(!swapped){
                break;
            }
        }

        // 用增强for循环简化打印逻辑
        for(int num : nums){
            System.out.print(num+"-->");
        }
    }
}

优化说明

  • 内层循环改为j < nums.length - 1 - i:每一轮外层循环后,末尾的i个元素已经是有序的最大值,无需再参与比较
  • 增加swapped标记:当某一轮没有元素交换时,说明数组已经完全有序,直接退出循环,避免后续无效循环
  • 使用增强for循环简化数组遍历打印代码

内容的提问来源于stack exchange,提问作者Vineeta Barkha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:40:27