黑马程序员技术交流社区

标题: 关于数组冒泡排序的问题 [打印本页]

作者: EDDY_Liang    时间: 2014-5-23 16:38
标题: 关于数组冒泡排序的问题
本帖最后由 EDDY_Liang 于 2014-5-24 14:20 编辑

class day5555
/*
运用冒泡排序的方式给数组arr[6,5,7,1,4,9,2]进行排列,
不知道为什么,编译没有错误,但是运行的时候数组排列前和排列后的顺序都一样,想了半天也没想出来是什么回事,各位大哥帮忙看看把,我是新手
*/

{
        public static void main(String[] args)
        {
        int [] arr={6,5,7,1,4,9,2};
        
        print(arr);   \\排列前
        bubblesort(arr);
        print(arr);   \\排列后
        }
        public static void print(int arr[])
        {
                for(int a=0;a<arr.length;a++)
                {
                        System.out.print(arr[a]);
                }
                System.out.println();
        }
        public static void bubblesort(int arr[])
        {
                for(int x =0;x<arr.length-1;x++)
                {
                        
                        for(int y=0;y<arr.length-x-1;y++)
                        {
                                if(arr[y]<arr[y+1])
                                {
                                        int d=arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y]=d;        
                                }        
                        }
                }
        }
}
        
作者: EDDY_Liang    时间: 2014-5-23 16:59
自己给自己顶一下啊,有谁可以解答下吗??

作者: Aron    时间: 2014-5-23 17:08
  1. public static void main(String[] args) {
  2.                 int[] arr = { 6, 5, 7, 1, 4, 9, 2 };

  3.                 print(arr);
  4.                 bubblesort(arr);
  5.                 print(arr);
  6.         }

  7.         public static void print(int arr[]) {
  8.                 for (int a = 0; a < arr.length; a++) {
  9.                         System.out.print(arr[a]);
  10.                 }
  11.                 System.out.println();
  12.         }

  13.         public static void bubblesort(int arr[]) {
  14.                
  15.                 for (int x = 0; x < arr.length - 1; x++) {

  16.                         for (int y = 0; y < arr.length - x - 1; y++) {
  17.                                 if (arr[y] < arr[y + 1]) {
  18.                                         int d = arr[y];
  19.                                         arr[y] = arr[y + 1];
  20.                                         arr[y+1] = d;
  21.                                 }
  22.                         }
  23.                 }
  24.         }
复制代码


你太粗心了啊   那个是arr[y+1]=d;啊   下次如果遇到这种问题可以自己debug测试 一步一步看 debug很有用的
作者: 张辉玉    时间: 2014-5-23 17:10
楼主  你那代码中的  换算写错了, int d=arr[y];    arr[y]=arr[y+1];  arr[y]=d;    你要最后的arr[y] 改成  arr[y+1]才行。
作者: EDDY_Liang    时间: 2014-5-23 17:20
张辉玉 发表于 2014-5-23 17:10
楼主  你那代码中的  换算写错了, int d=arr[y];    arr[y]=arr[y+1];  arr[y]=d;    你要最后的arr[y] 改 ...

晕,折腾了我一个小时,谢谢,下次一定注意这些细节
作者: EDDY_Liang    时间: 2014-5-23 17:23
Aron 发表于 2014-5-23 17:08
你太粗心了啊   那个是arr[y+1]=d;啊   下次如果遇到这种问题可以自己debug测试 一步一步看 debug很有用 ...

debug是什么东西啊,我现在都是用记事本一个一个敲的。。。:L
作者: Aron    时间: 2014-5-23 17:51
EDDY_Liang 发表于 2014-5-23 17:23
debug是什么东西啊,我现在都是用记事本一个一个敲的。。。

这样啊   你才开始接触编程是不  我觉得其实用记事本敲可以加强对代码的记忆 但是出错了不好找 你可以去下载一个软件叫Eclipse里面功能很强大 也能学到很多新东西 那个不大 上手也简单  你可以先用中文版的 不过建议最好熟悉下英文版 又不懂得可以问我 加QQ 私聊 也可以百度 谷歌都有的哈
作者: Aron    时间: 2014-5-23 17:54
Aron 发表于 2014-5-23 17:51
这样啊   你才开始接触编程是不  我觉得其实用记事本敲可以加强对代码的记忆 但是出错了不好找 你可以去 ...

对了补充下  你问的debug其实是一个追踪程序运行检查系统数据的工具程序  你可以百度下有很详细的解释
作者: 想飞的鱼    时间: 2014-5-23 21:31
首先复制了你的代码,编译没通过,一看注释的//写反了,可见楼主的粗心大意,后来编译运行看结果然后查找问题,又发现楼主下面代码的地方赋值写错了,如下:
  1. class day5555
  2. /*
  3. 运用冒泡排序的方式给数组arr[6,5,7,1,4,9,2]进行排列,
  4. 不知道为什么,编译没有错误,但是运行的时候数组排列前和排列后的顺序都一样,想了半天也没想出来是什么回事,各位大哥帮忙看看把,我是新手
  5. */

  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         int [] arr={6,5,7,1,4,9,2};
  10.       
  11.         print(arr);   //排列前
  12.         bubblesort(arr);
  13.         print(arr);   //排列后
  14.         }
  15.         public static void print(int arr[])
  16.         {
  17.                 for(int a=0;a<arr.length;a++)
  18.                 {
  19.                         System.out.print(arr[a]);
  20.                 }
  21.                 System.out.println();
  22.         }
  23.         public static void bubblesort(int arr[])
  24.         {
  25.                 for(int x =0;x<arr.length-1;x++)
  26.                 {
  27.                        
  28.                         for(int y=0;y<arr.length-x-1;y++)
  29.                         {
  30.                                 if(arr[y]<arr[y+1])
  31.                                 {
  32.                                         int d=arr[y];
  33.                                         arr[y]=arr[y+1];
  34.                                         arr[y+1]=d;  //此处你粗心了,写成arr[y]=d;     
  35.                                 }      
  36.                         }
  37.                 }
  38.         }
  39. }
复制代码

另外给楼主提点建议,写代码的时候一定注意代码的可读性和规范性,养成良好的编程习惯,因为我们以后写代码不只是给我们自己看的,比如上面代码中,定义一个临时变量就可以定义成int temp,而不是写d,类名可以写成BubbleSortTest什么的,希望能帮到你,加油!
作者: EDDY_Liang    时间: 2014-5-24 10:47
想飞的鱼 发表于 2014-5-23 21:31
首先复制了你的代码,编译没通过,一看注释的//写反了,可见楼主的粗心大意,后来编译运行看结果然后查找问 ...

嗯,好的,我以后会注意这点的,谢谢啊
作者: 周俊波    时间: 2014-5-24 11:13
看看看看 ~~~~大家一起努力
作者: yinxjfly    时间: 2014-5-24 16:24
:L:L!
晕.......
作者: 27ZJQ    时间: 2014-5-31 09:47
学习了。
作者: ↘ふ紫铯幽夢    时间: 2014-5-31 10:18
已经有人回答了
作者: Lex    时间: 2014-5-31 10:24
这类小问题是新人都会犯的,继续加油吧,楼主
作者: 27ZJQ    时间: 2014-6-11 23:01
EDDY_Liang 发表于 2014-5-23 17:23
debug是什么东西啊,我现在都是用记事本一个一个敲的。。。

我也用记事本呢。。。
作者: tanshion    时间: 2014-6-12 01:09
大家一起努力
作者: 18353666072    时间: 2014-6-12 08:41
过来看看,加点硬币
作者: 不去会死    时间: 2014-6-12 09:45
LZ不用管我,我是来水黑币的
作者: 张周飞    时间: 2014-6-12 10:21
多练, 多理解,多请教,,,,度娘,知道、贴吧、各种论坛。总有能解决的
作者: 小生    时间: 2014-6-12 12:52

        public static void bubblesort(int arr[])
        {
                for(int x =0;x<arr.length-1;x++)
                {
                        
                        for(int y=0;y<arr.length-x-1;y++)
                        {
                                if(arr[y]<arr[y+1])
                                {
                                        int d=arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y]=d;        //这句有问题!!!。
/*
你将arr[y]的值已经赋给d,所以arr[y]=d;就是一句废话。应该是arr[y+1]=d.
还有你单行注释写错了,刚才我运行了你的代码发现的,是//,而不是\\.
*/

                                }        
                        }
                }
        }
作者: 钟翠翠    时间: 2014-7-29 11:02
这种小错误大家又会犯的,加油!!!
作者: 含着泪微笑    时间: 2014-11-4 20:53
路过~~~~
作者: iblackhorse    时间: 2015-1-4 14:13
最后一句写错了啊。等于没复制
作者: 路尽鹭飞    时间: 2015-1-17 22:37
想飞的鱼 发表于 2014-5-23 21:31
首先复制了你的代码,编译没通过,一看注释的//写反了,可见楼主的粗心大意,后来编译运行看结果然后查找问 ...

我是新手,之前看过冒泡排序,也自己打了几遍,结果现在还是没能很流利的打出来
作者: 直护这夜    时间: 2015-5-14 19:17
看来你烦的错误,和大神的解答 我以后也会注意了
作者: zhubingg    时间: 2015-6-2 21:45
嗯 ,复习下, 要注意细节
作者: 特立独行    时间: 2015-10-30 19:49
最好每行注释,会更清楚
作者: icm    时间: 2015-12-17 22:10
冒泡排序。。。
作者: icm    时间: 2015-12-17 22:29
太赞了。。
作者: ZZT    时间: 2016-4-29 19:15
zzzzzzzzzz




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2