黑马程序员技术交流社区

标题: for循环的问题? [打印本页]

作者: woaiheima    时间: 2013-12-7 20:22
标题: for循环的问题?
本帖最后由 woaiheima 于 2013-12-9 20:15 编辑
  1. class  ArrayTest2
  2. {
  3.         //选择排序。
  4.         public static void selectSore(int[]arr)
  5.         {
  6.                 for (int x=0;x<arr.length-1 ;x++ )
  7.                 {
  8.                         for (int y=x+1;y<arr.length ;y++ )
  9.                         {
  10.                                 if (arr[x]>arr[y])
  11.                                 {
  12.                                         /*
  13.                                         int temp=arr[x];
  14.                                         arr[x]=arr[y];
  15.                                         arr[y]=temp;
  16.                                         */
  17.                                         swap(arr,x,y);
  18.                                 }
  19.                         }
  20.                 }        
  21.         }
  22.         //冒泡排序。
  23.         public static void bubbleSore(int[]arr)
  24.         {
  25.                 for (int m=0;m<arr.length-1 ;m++ )
  26.                 {
  27.                         for (int n =0;n<arr.length-m-1 ;n++ )
  28.                         {
  29.                                         /*
  30.                                         int temp=arr[x];
  31.                                         arr[x]=arr[y];
  32.                                         arr[y]=temp;
  33.                                         */
  34.                                 swap(arr,n,n+1);
  35.                         }
  36.                 }
  37.         
  38.         }
  39.         //把数组打印出来,格式[? ,? ,?]。
  40.         public static void printArray(int []arr)
  41.         {
  42.           System.out.print("[");
  43.                 for (int x=0;x<arr.length ;x++ )
  44.                 {
  45.                         if(x!=arr.length-1)
  46.                                 System.out.print(arr[x]+",");
  47.                         else
  48.                                 System.out.println(arr[x]+"]");
  49.                 }
  50.         }
  51.         //把位置置换封装成一个函数。
  52.         public static void swap(int[]arr,int a,int b)
  53.         {
  54.                 int temp=arr[a];
  55.                 arr[a]=arr[b];
  56.                 arr[b]=temp;
  57.         }
  58.         //通过主函数进行调用。并在屏幕上显示出来。
  59.         public static void main (String [] args)
  60.         {
  61.                 int[] arr={6,1,3,2,4,7,9};
  62.                 printArray(arr);
  63.                 selectSore(arr);
  64.                 printArray(arr);
  65.                 bubbleSore(arr);
  66.                 printArray(arr);
  67.         }
  68. }
复制代码
我想问下这个里面的x和y代表什么呢?是x和y进行比较吗?
作者: 影凡    时间: 2013-12-7 20:38
这里面的x,y表示的数组arr的角标,不是将x与y比较,比较x与y是没有任何意义的,比较的是arr[x]与arr[y]的值的大小
作者: woaiheima    时间: 2013-12-7 20:49
影凡 发表于 2013-12-7 20:38
这里面的x,y表示的数组arr的角标,不是将x与y比较,比较x与y是没有任何意义的,比较的是arr[x]与arr[y]的值 ...

那就是有两组数据进行比较吗?arr[x]和arr[y]是两个数组吗?并且这两个数组的数据是一样的??我还是不理解??

作者: Household    时间: 2013-12-7 21:36
这是未知内容参与运算,有两个,这个两个未知内容的类型都是int;是两个变量用于运算,也不是X与Y比较;题中比较的是数组元素,先明确!!
作者: 胡永城    时间: 2013-12-7 23:28

  1.         /**
  2.          * 选择排序(增序排列)
  3.          * 数组中第一个数与其后的每一个数比较,
  4.          * 较小值与第一个数交换位置, 遍历完成后最小值在第一个位置,
  5.          * 再从第二个值与其后的每一个数比较...
  6.          * 直到剩余一个值时停止,这个值为最大值
  7.          */
  8.         public static void SelectSort(int[] arr) {
  9.                 for (int x = 0; x < arr.length - 1; x++) {//x表示每次循环比较时的第一个数
  10.                         for (int y = x + 1; y < arr.length; y++) {//y表示遍历指针,从x之后开始遍历
  11.                                 if (arr[x] > arr[y])// 比较,较小值交换到前面
  12.                                 {
  13.                                         swap(arr, x, y);
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18.         //交换方法提取
  19.         private static void swap(int[] arr, int i, int j) {
  20.                 int temp;
  21.                 temp = arr[i];
  22.                 arr[i] = arr[j];
  23.                 arr[j] = temp;
  24.         }
复制代码

  1. /**
  2.          * 冒泡排序
  3.          * 比较相邻元素,每次都把本循环比较最大值移到最后面,小值前移
  4.          * 每次都比上一次少比较一个值(少了上次循环最后的最大值),
  5.          * 直到剩余一个元素为最小值(在最前面)
  6.          * 每次循环,都把最大值大值向后移动,最大值移动到最后一位,就像冒泡一样。
  7.          */
  8.         public static void bubbleSort(int[] arr) {
  9.                 for (int i = 1; i < arr.length; i++) {
  10.                         //i=1,为了j < arr.length - i,控制每循环都比上次少一次(因为i++),
  11.                         //也不是强制为1,等于0也可以,j < arr.length - i-1就可以了。
  12.                         for (int j = 0; j < arr.length - i; j++) {
  13.                                 if (arr[j] > arr[j + 1])// 比较交换相邻元素
  14.                                 {
  15.                                         swap(arr, j, j + 1);
  16.                                 }
  17.                         }
  18.                 }
  19.         }
复制代码

作者: 胡永城    时间: 2013-12-7 23:33
woaiheima 发表于 2013-12-7 20:49
那就是有两组数据进行比较吗?arr[x]和arr[y]是两个数组吗?并且这两个数组的数据是一样的??我还是不理 ...

arr,是数组名,arr[x],表示的是数组中下标为x的元素,arr[y]同。建议开始学习基础视频。
作者: 影凡    时间: 2013-12-8 02:53
woaiheima 发表于 2013-12-7 20:49
那就是有两组数据进行比较吗?arr[x]和arr[y]是两个数组吗?并且这两个数组的数据是一样的??我还是不理 ...

x和y是arr数组的角标,举个例子,题中的代码相当于我们比较某学校每个班级人数的大小并排序,那么arr数组相当于某个学校的名字,而x,y相当于学校里的班级号,arr[y]或者arr[x]表示的是学校某班级的人数,这下好理解了吧~arr[y]或者arr[x]指向的是arr数组中的值,而不是两个数组,代码中x和y的值是不会一样的,如果一样的话相同值比较就没有意义了~
作者: woaiheima    时间: 2013-12-9 20:15
影凡 发表于 2013-12-8 02:53
x和y是arr数组的角标,举个例子,题中的代码相当于我们比较某学校每个班级人数的大小并排序,那么arr数组 ...

理解了,谢谢!!




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