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

Java冒泡排序异常:跳过数组首元素从第二位排序,求问题解决方案

问题定位
  • 循环变量冲突:外层冒泡排序的控制变量为i,后续打印数组的循环复用了该变量,打印完成后i的值被修改为数组长度n,直接导致外层排序循环仅执行1次就终止,仅完成一轮元素交换,无法完成完整排序。
  • 打印位置错误:排序结果打印逻辑放在了外层排序循环内部,会每完成一轮冒泡就输出一次数组,不符合排序完成后统一输出的预期。
  • 内层循环边界错误:当前内层循环判断条件为j<limit-1,会导致数组最后两位元素无法参与比较,且未每轮缩小比较边界,存在大量无效比较。
修复方法

修改后的完整代码如下:

package exception;
import java.io.*;

public class Program6 {
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("enter numbers: ");
        int n = Integer.parseInt(br.readLine());
        int arr []= new int[n];
        
        for(int i=0; i<n; i++) {
            System.out.print("enter int:");
            arr[i] = Integer.parseInt(br.readLine());
        }
        int limit = n-1;
        boolean flag = false;
        int temp;
        for (int i=0; i<limit; i++) {
            // 修正内层循环边界,每轮缩小比较范围
            for(int j =0; j < limit - i; j++) {
                if(arr[j]>arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }
            if(!flag) break;
            else flag=false;
        }
        // 打印逻辑移到排序循环外,且使用独立循环变量
        System.out.println("sorted array: ");
        for(int k=0; k<n; k++)
            System.out.println(arr[k]);
    }
}

核心修改点:

  • 打印数组的循环改用独立变量k,避免和外层排序的i冲突
  • 将打印逻辑移到外层排序循环结束后,确保仅输出最终排序结果
  • 修正内层循环边界为j < limit - i,既保证所有元素参与比较,也减少了无效比较提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:18:03