ITjingxinbao 2023-02-28 22:13 采纳率: 80.8%
浏览 17
已结题

java冒泡得不到理想结果


 public static void main(String[] args) {
        int a[] = {1, 7, 9, 4, 34, 56, 23, 57, 78, 86};
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
            for (i = 0; i < a.length; i++)
                System.out.print(a[i] + " ");
        }

为什么得不到理想的结果
最后是这样的1 7 4 9 34 23 56 57 78 86
这是什么原因

  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-28 22:19
    关注

    基于Monster 组和GPT的调写:
    第二个for循环用来遍历整个数组并比较相邻两个元素的大小,将它们交换位置。这一步是冒泡排序算法的核心步骤。但是,根据你提供的代码,你在内层循环之外打印了数组元素,这会导致输出不正确。应该将打印的循环放在外面,而不是在内部循环中。此外,循环变量 i 在外层循环和内层循环中同时使用,会导致内层循环中的 i 覆盖了外层循环中的 i 的值,从而导致错误。可以使用不同的变量名,或者将内层循环放在一个方法中来避免这个问题。

    以下是修改后的代码,将打印循环放在外面,避免了循环变量覆盖问题:

    public static void main(String[] args) {
        int a[] = {1, 7, 9, 4, 34, 56, 23, 57, 78, 86};
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月1日
  • 已采纳回答 3月1日
  • 创建了问题 2月28日

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?