黑马程序员技术交流社区

标题: 这段代码不懂 [打印本页]

作者: 完美恋爱    时间: 2013-10-14 18:24
标题: 这段代码不懂
本帖最后由 完美恋爱 于 2013-10-14 20:05 编辑

class a
{
        public static void main(String[] args)
        {
                int[] arr = {2,1,3,8,6,9,5};
               
                for(int x = 0; x < arr.length; x++)
                {
                        int y;
                        
                        for(y = 0; y < arr.length-x-1; y++)
                        {
                                if(arr[y] > arr[y+1])
                                {
                                        int s = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = s;
                                }
                        }
                        
                        System.out.println(arr[y]);
                }
        }
}
请问为什么打印出来的是从大到小排序的顺序啊,我认为是从小到大排序才对啊?
作者: 阿里策    时间: 2013-10-14 18:36
  1. if(arr[y] > arr[y+1])
  2. {
  3.     int s = arr[y];
  4.     arr[y] = arr[y+1];
  5.     arr[y+1] = s;
  6. }
复制代码
这段代码是说,如果数组里前面的数大于后面的那个数,那么二者互换,这样就把小的数换到了前面。你用了两个循环,这样就把所有的数组元素都遍历比较一边,所以最后会是从小到大输出。希望能帮助你理解{:soso_e100:}
作者: 郑齐育    时间: 2013-10-14 19:04
问题在于你将int y 定义在了内循环外
public class a {
        public static void main(String[] args) {
                int[] arr = { 2, 1, 3, 8, 6, 9, 5 };

                for (int x = 0; x < arr.length; x++) {
                        int y;

                        for (y = 0; y < arr.length - x - 1; y++) {
                                if (arr[y] > arr[y + 1]) {
                                        int s = arr[y];
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = s;
                                }
                        }
                        System.out.println(y);
                        //System.out.println(arr[y]);
                }
        }
}
输出为
6
5
4
3
2
1
0
也就是说你每次内循环好后将数组从小到大排列了,但是你每次输出都是从数组的末尾来输出。而且实际上从第二次内循环开始,你都是在做无用功。
下面是一种正确的代码。
public class A {
        public static void main(String[] args) {
                int[] arr = { 2, 1, 3, 8, 6, 9, 5 };

                for (int x = 0; x < arr.length; x++) {
                        //int y;

                        for (int y = 0; y < arr.length - x - 1; y++) {
                                if (arr[y] > arr[y + 1]) {
                                        int s = arr[y];
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = s;
                                }
                        }
                        System.out.println(arr[x]);
                        //System.out.println(y);
                        //System.out.println(arr[y]);
                }
        }
}
作者: To    时间: 2013-10-14 19:25
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 凝聚    时间: 2013-10-14 19:55
package seventeen;
import java.util.Arrays;
public class a {
        public static void main(String[] args) {
                 int[] arr = {2,1,3,8,6,9,5};
                 System.out.println("     "+Arrays.toString(arr));  
        for(int x = 0; x < arr.length; x++)
         {
                 int y;
                 for( y = 0; y < arr.length-x-1; y++)
                 {
                         if(arr[y] > arr[y+1])
                         {
                                 int s = arr[y];
                                 arr[y] = arr[y+1];
                                 arr[y+1] = s;
                         }                        
                 }
               
                 System.out.print(arr[y]+"   ");         
                 System.out.println(Arrays.toString(arr));
         }
     
        }
}
输出的结果为:

    [2, 1, 3, 8, 6, 9, 5]
9   [1, 2, 3, 6, 8, 5, 9]
8   [1, 2, 3, 6, 5, 8, 9]
6   [1, 2, 3, 5, 6, 8, 9]
5   [1, 2, 3, 5, 6, 8, 9]
3   [1, 2, 3, 5, 6, 8, 9]
2   [1, 2, 3, 5, 6, 8, 9]
1   [1, 2, 3, 5, 6, 8, 9]
仔细分析【】号中的元素是一个接一个的比较,由于y++的缘故等比较最后一个是其元素角标为arr[y],这时
arr[y]以比较完它的结果以确定,输出arr[y],此时的arr[y]就是数组中的最后一个元素。
我表达的不清楚,希望你能领悟。

作者: 完美恋爱    时间: 2013-10-14 20:05
太谢谢各位了




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