黑马程序员技术交流社区

标题: 关于函数传参问题? 求解 [打印本页]

作者: 蔡陶军    时间: 2013-4-11 14:36
标题: 关于函数传参问题? 求解
本帖最后由 蔡陶军 于 2013-4-11 14:47 编辑
  1. class SelectSortDemo88 {
  2.         public static void main(String[] args) {
  3.                 int[] arr = {5,2,6,4,7,3,9,1};
  4.                 selectSort(arr);
  5.                 printArray(arr);
  6.         }
  7.         public static void selectSort(int[] arr) {
  8.                 for(int i=0;i<arr.length-1;i++) {
  9.                         int num = arr[i];
  10.                         int index = i;
  11.                         for(int j=i+1;j<arr.length;j++) {
  12.                                 if(arr[i]<arr[j]) {
  13.                                         swap(i,j,arr);
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18.         public static void swap(int a,int b,int[] arr) {
  19.                 arr[a] = arr[a]^arr[b];
  20.                 arr[b] = arr[a]^arr[b];
  21.                 arr[a] = arr[a]^arr[b];
  22.         }
  23.         public static void printArray(int[] arr) {
  24.                 System.out.print("[");
  25.                 int count = 0;
  26.                 for(int a:arr) {
  27.                         if(count!=arr.length-1) {
  28.                                 System.out.print(a+",");
  29.                                 count++;
  30.                         }else {
  31.                                 System.out.println(a+"]");
  32.                         }
  33.                 }
  34.         }
  35. }
复制代码
我发现怎么函数传参的时候 swap这个函数 我调换i和j的位置,但是结果还是一样?而我的逻辑判断是结果会受i和j的位置变化而发生改变的,求解,大侠们

作者: Asan    时间: 2013-4-11 15:05
本帖最后由 Asan 于 2013-4-11 15:11 编辑

差点没有看出来! 嘿嘿
for(int j=i+1;j<arr.length;j++) {

12.                                if(arr<arr[j]) {

13.                                        swap(i,j,arr);      //无论你i和j怎么换

14.                                }

15.                        }

16.                }

17.        }

18.        public static void swap(int a,int b,int[] arr) {     //下面的异或运算都没有改变   十九行和二十行换了个位置,貌似没有区别吧!

19.                arr[a] = arr[a]^arr;                               //arr = arr[a]^arr;

20.                arr = arr[a]^arr;                           //arr[a] = arr[a]^arr;

21.                arr[a] = arr[a]^arr;                           //arr[a] = arr[a]^arr;

22.        }



好像因为【b】是加粗我不知道怎么弄的,那个代码上就消失了,你自己加上

作者: 通行天下    时间: 2013-4-11 15:09
  1. class SelectSortDemo {

  2.         public static void main(String[] args) {

  3.                 int[] arr = {5,2,6,4,7,3,9,1};
  4.                                 printArray(arr);

  5.                 selectSort(arr);

  6.                 printArray(arr);

  7.         }

  8.         public static void selectSort(int[] arr) {

  9.                 for(int i=0;i<arr.length-1;i++) {

  10.                         //int num = arr[i];这两句没啥用

  11.                         //int index = i;

  12.                         for(int j=i+1;j<arr.length;j++) {

  13.                                 if(arr[i]<arr[j]) {

  14.                                         swap(i,j,arr);

  15.                                 }

  16.                         }

  17.                 }

  18.         }

  19.         public static void swap(int a,int b,int[] arr) {

  20.                 arr[a] = arr[a]^arr[b];

  21.                 arr[b] = arr[a]^arr[b];

  22.                 arr[a] = arr[a]^arr[b];

  23.         }

  24.         public static void printArray(int[] arr) {

  25.                 System.out.print("[");

  26.                 int count = 0;

  27.                 for(int a:arr) {

  28.                         if(count!=arr.length-1) {

  29.                                 System.out.print(a+",");

  30.                                 count++;

  31.                         }else {

  32.                                 System.out.println(a+"]");

  33.                         }

  34.                 }

  35.         }

  36. }

  37. 你再试试吧,现在前后输出不一样啦。
复制代码





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