A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王亚飞 于 2013-3-12 14:16 编辑
  1. public class Test {

  2.         public static void main(String[] args)
  3.         {
  4.                 int[] arr = {10,5,2,8,9,1};
  5.                 printArray(arr);
  6.                
  7.         
  8.                         for (int x = 0; x < arr.length-1; x++)
  9.                         {
  10.                                 for (int y = x+1; y < arr.length; y++)
  11.                                 {
  12.                                         if(arr[x]>arr[y]);
  13.                                         {
  14.                                                 //swap(arr,x,y);
  15.                                                 int temp = arr[x];
  16.                                                 arr[x] = arr[y];
  17.                                              
  18.                                                 arr[y] = temp;
  19.                                                 
  20.                                         }
  21.                                        
  22.                                 }
  23.                                 
  24.                         }
  25.                         
  26.                         
  27.                         printArray(arr);
  28.                 }
  29.         public static void printArray(int[] arr)
  30.             {
  31.                     System.out.print("[");
  32.                     for(int x = 0;x<arr.length;x++)
  33.                     {
  34.                             if(x!=arr.length-1)
  35.                                     System.out.print(arr[x]+",");
  36.                             else
  37.                                     System.out.println(arr[x]+"]");
  38.                     }
  39.             }
  40.                
  41.         

  42. }

复制代码
排序前和排序后打印的还是一样的,怎么回事,我哪错了

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 鼓励鼓励

查看全部评分

14 个回复

倒序浏览
本帖最后由 丁一 于 2013-3-12 14:15 编辑

冒泡排序,刚才说错了
回复 使用道具 举报
16.                                                int temp = arr[x];

17.                                                arr[x] = arr[y];

18.                                                arr[y] = arr[x];

19.                                                arr[x] = temp;

这里应该是
   int temp = arr[x];

   arr[x] = arr[y];
arr[y] = temp;
回复 使用道具 举报
张学林 发表于 2013-3-12 14:12
16.                                                int temp = arr[x];

17.                           ...

我去,晕了,怎么还多写了一个,我说找了半天又给换回去了,哈哈
回复 使用道具 举报
张学林 发表于 2013-3-12 14:12
16.                                                int temp = arr[x];

17.                           ...

改了之后还是不行。。。。
回复 使用道具 举报
张学林 发表于 2013-3-12 14:12
16.                                                int temp = arr[x];

17.                           ...

改了之后还是不行。。。。
回复 使用道具 举报
大哥啊,你的13行多了个;

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 赞一个!

查看全部评分

回复 使用道具 举报
张学林 发表于 2013-3-12 14:22
大哥啊,你的13行多了个;

。。。。。。。看到了,我说呢,找了一上午了。。。。。。。。。。。。多谢多谢:kiss:
回复 使用道具 举报
王亚飞 发表于 2013-3-12 14:25
。。。。。。。看到了,我说呢,找了一上午了。。。。。。。。。。。。多谢多谢 ...

:lol我也有过类似经历,把语句写错位置了,找了一个多小时也找不到错误
回复 使用道具 举报
王亚飞 发表于 2013-3-12 14:25
。。。。。。。看到了,我说呢,找了一上午了。。。。。。。。。。。。多谢多谢 ...

:lol我也有过类似经历,把语句写错位置了,找了一个多小时也找不到错误
回复 使用道具 举报
public static void main(String[] args) {
                int[] arr = { 10, 5, 2, 8, 9, 1 };
                printArray(arr);
                for (int x = 0; x < arr.length - 1; x++) {
                        for (int y = x + 1; y < arr.length; y++) {
                                if (arr[x] > arr[y]) //你在这里打了一个分号
                                {
                                        // swap(arr,x,y);
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y] = temp;

                                }

                        }

                }

                printArray(arr);

        }

        public static void printArray(int[] arr) {
                System.out.print("[");
                for (int x = 0; x < arr.length; x++) {
                        if (x != arr.length - 1)
                                System.out.print(arr[x] + ",");
                        else
                                System.out.println(arr[x] + "]");
                }
        }

希望你在以后的编程中细心一点,粗心是程序员的大忌。   继续努力吧!
回复 使用道具 举报
  1. package com.itheima;

  2. public class Te {

  3.         public static void main(String[] args) {
  4.                 int[] arr = { 10, 5, 2, 8, 9, 1 };
  5.                 printArray(arr);
  6.                 int temp = 0;
  7.                 for (int i = 0; i < arr.length - 1; i++) {
  8.                         // 内层完成一个完整的循环,会把那一轮中的最大的一个数放到最后,我们要保证从小到大的排列所有的数就得把剩下的数再按照比大小的方式互换位置(最大的数位置不会变,因为第一次已经把它拍到最后了)
  9.                         for (int x = 0; x < arr.length - 1; x++) {
  10.                                 // 如果前面的大于后面的,互换值(这样一轮下来可以将最大的值放到数组的最后)
  11.                                 if (arr[x] > arr[x + 1]) {
  12.                                         temp = arr[x];
  13.                                         arr[x] = arr[x + 1];
  14.                                         arr[x + 1] = temp;
  15.                                 }
  16.                         }
  17.                 }

  18.                 printArray(arr);
  19.         }

  20.         public static void printArray(int[] arr) {
  21.                 System.out.print("[");
  22.                 for (int x = 0; x < arr.length; x++) {
  23.                         if (x != arr.length - 1)
  24.                                 System.out.print(arr[x] + ",");
  25.                         else
  26.                                 System.out.println(arr[x] + "]");
  27.                 }
  28.         }

  29. }
复制代码
代码如上,你把内层的循环搞乱了,内层做完一个完整循环的作用是把最大的数放到最靠后的位置,第二次完整循环的作用就是把第二大的数放到倒数第二的位置(因为最后是跟最大的数相比,肯定小于最大的数),依次排序,这是冒泡排序的思想

你的代码有几处问题,你应该还是新手吧,下面的问题要注意哦,一开始就养成一个好习惯是很重要的:

for循环变量尽量用 i j来表示(为了便于你看,我给你用x表示了)

代码记得缩进,控制格式

函数的作用应该明确,你既然知道输出可以写成一个函数,那么排序呢?不也可以作为一个功能用一个函数来封装么?(为了便于你看,我就着你的代码改了,没有单独提出来)


排序这块不要着急,要搞明白内外层循环到底是干嘛的,光靠脑袋想的话,尤其是初学者,容易犯晕,最好拿个笔,写写,画画就能明白

给你一点建议:如果这个搞明白了,可以试着再去打印等腰三角形 菱形 从大到小(我给你写的是从小到大排序)排序,求最大值等等

不要一下手就写,初期学习的时候就先写写画画,思路理出来,答案自然就有了

有什么不明白的可以再问我哦  希望能帮到你  加油





回复 使用道具 举报
我回帖这一会儿的时间好多人回复啊,好速度 呵呵~~
回复 使用道具 举报
我纠结了
  1. public class Test {

  2.         public static void main(String[] args)
  3.         {
  4.                 int[] arr = {10,5,2,8,9,1};   
  5.                 printArray(arr);
  6.         
  7.                         for (int x = 0; x < arr.length-1; x++)
  8.                         {
  9.                                 for (int y = x + 1; y < arr.length; y++)
  10.                                 {
  11.                                         if(arr[y]<arr[x])        //我说你这里怎么多了个分号啊,我半个钟头没发现
  12.                                         {
  13.                                                 int temp = arr[y];
  14.                                                 arr[y] = arr[x];
  15.                                                 arr[x] = temp;
  16.                                                 
  17.                                         }
  18.                                        
  19.                                 }
  20.                                 
  21.                         }
  22.                         
  23.                         
  24.                         for(int i = 0; i < arr.length; i++) {
  25.                                 System.out.print(
  26.                                                 arr[i] + "--");
  27.                         }
  28.                         System.out.println();
  29.                 }
  30.         public static void printArray(int[] arr)
  31.         {
  32.                     for(int i = 0; i < arr.length; i++) {
  33.                             System.out.print(arr[i] + "--");
  34.                     }
  35.                     System.out.println();
  36.         }
  37.                
  38. }

复制代码
回复 使用道具 举报
  1. class Test
  2. {

  3. public static void main(String[] args)
  4. {
  5. int[] arr = {10,5,2,8,9,1};
  6. printArray(arr);
  7. sort(arr);

  8. printArray(arr);
  9. }
  10. public static void sort(int[] arr)
  11. {
  12. for (int x = 0; x < arr.length-1; x++)
  13. {
  14. for (int y = x+1; y < arr.length; y++)
  15. {
  16. if(arr[x]>arr[y])//<FONT color=red>看了好久都没找到问题,原来是这里多了个;全靠楼上的提醒
  17. //我还以为是你没定义函数呢,我帮你改了一下,可能这样的格式更规范哈!
  18. </FONT>{
  19. //swap(arr,x,y);
  20. int temp = arr[x];
  21. arr[x] = arr[y];

  22. arr[y] = temp;

  23. }

  24. }

  25. }


  26. // printArray(arr);
  27. }
  28. public static void printArray(int[] arr)
  29. {
  30. System.out.print("[");
  31. for(int x = 0;x<arr.length;x++)
  32. {
  33. if(x!=arr.length-1)
  34. System.out.print(arr[x]+",");
  35. else
  36. System.out.println(arr[x]+"]");
  37. }
  38. }



  39. }
复制代码
回复 使用道具 举报
vmvm555 发表于 2013-3-12 14:56
我纠结了

哈哈,我也是没发现,可能写的时候顺手就把分号加上了,最后也是找不出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马