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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-3-30 20:37  /  1234 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 对给定的数组进行排序{5,1,6,4,2,8,9}
  3. */
  4. class ArrayTest2
  5. {
  6.      public static void selectSort(int[] arr)
  7.      {
  8.      for(int x=0;x<arr.length;x++)
  9.        {
  10.            for(int y=x+1;y<arr.length-1;y++)
  11.                     {
  12.                     if(arr[x]>arr[y])
  13.                       {
  14.                                int temp=arr[x];
  15.                                arr[x]=arr[y];
  16.                                arr[y]=temp;
  17.                              }       
  18.                     }
  19.        }       
  20.      }

  21.      public static void main(String[] args)
  22.      {
  23.              int[] arr={5,1,6,4,2,8,9};
  24.              //排序前;
  25.              printArray(arr);
  26.              //排序;
  27.              selectArrar(arr);
  28.              //排序后;
  29.              printArray(arr);
  30.      }


  31.     public static void printArray(int[] arr)
  32.                     {
  33.                                     System.out.println("(");
  34.                                     for(int x=0;x<arr.length;x++)
  35.                                     {
  36.                                      if(x!=arr.length-1)
  37.                                         System.out.print(arr[x]+",");
  38.                                      else
  39.                                         System.out.println(arr[x]+")");
  40.                                     }       
  41.                     }
  42. }
复制代码
大家好!这是毕老师视频里边的选择排序的代码,就是我想问的是这段代码从前到后的执行顺序是什么样的啊 ,哥们看蒙圈了啊,郁闷死了,恳求大伙帮忙分析下这段程序的流程啊,跪谢了。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

6 个回复

正序浏览
流程楼上已经分析的很清楚了,排序的连个for循环里的x的范围好像写错了,数组会越界啊
  1. for(int x=0;x<arr.length-1;x++)  //这里应该是x<arr.length-1

  2. {

  3.     for(int y=x+1;y<arr.length;y++)  //这里是x<arr.length

  4.     {

  5.         if(arr[x]>arr[y])

  6.        {

  7.         int temp=arr[x];

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

  9.         arr[y]=temp;

  10.        }

  11.    }

  12. }

复制代码

回复 使用道具 举报
橡皮-leo 发表于 2014-3-30 21:40
Java程序运行入口就是main函数,Java文件要想运行起来就必须要得依靠main函数,
首先看main函数
MAIN函数里 ...

谢谢你啊 哈哈
回复 使用道具 举报
papercup 发表于 2014-3-30 21:19
你写的第28行有问题啊,应该是 selectSort(arr); 吧。

程序的执行顺序是这样的:1.先执行main函数,在main ...

非常感谢,辛苦了!
回复 使用道具 举报
直接从主函数开始看,//排序前printArray(arr);这句会打印{5,1,6,4,2,8,9}    //排序;selectArrar(arr);这句是调用选择排序的方法,把数组排好序,   //排序后;printArray(arr); 这句再调用一次打印方法,会打印出排好序的,{1,2,4,5,6,8,9}
回复 使用道具 举报
Java程序运行入口就是main函数,Java文件要想运行起来就必须要得依靠main函数,
首先看main函数
MAIN函数里面首先调用了printArray()方法,jvm虚拟就去查找printArray()方法并运行方法里面的代码,当方法里面代码块执行完以后,虚拟机就接着往下执行这时selectArrar()方法被调用,虚拟机就去执行selectArrar()这里面的代码selectArrar()方法完成了排序操作,这是int arr = {5,1,6,4,2,8,9已经变成了{1,2,4,5,6,8,9},虚拟机就接着往下执行,再次调用了printArray()打印方法。
在一个Java文件里面可能不止一个类,在一个类里面也可能不止一个方法,其实要分析一段代码的的执行顺序,先从主函数入手,这样就很清楚了。不用去管类、方法定义时的位置,只要注意调用的位置就可以了。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
你写的第28行有问题啊,应该是 selectSort(arr); 吧。

程序的执行顺序是这样的:1.先执行main函数,在main函数中定义了一个int型数组arr;
2.然后调用printArray();方法将排序之前的数组打印出来;
3.调用selectSort();选择排序方法,将数组排序;
4.再次调用printArray();方法将排序之后的数组打印出来。

printArray();方法只是一个将数组元素按顺序打印出来的方法而已。
selectSort();方法就是选择排序方法。
如果这两个方法有看不懂请回复。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马