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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改