黑马程序员技术交流社区

标题: 对数组中交换两个元素的位置写法原理不太理解,求明确解释 [打印本页]

作者: 柯玲    时间: 2012-7-15 17:52
标题: 对数组中交换两个元素的位置写法原理不太理解,求明确解释
如下代码:
  1. public class SwapTest{
  2.         public static void main(String[] args) {
  3.                 String[] strings=new String[]{"hello","thanks","bye-bye"};
  4.                 swap(strings,1,2);
  5.                 for(String str:strings){
  6.                         System.out.println(str);
  7.                 }
  8.         }
  9.         private static <T> void swap(T[] a, int i, int j) {
  10.          T tmp=a[i];
  11.          a[i]=a[j];
  12.          a[j]=tmp;
  13.         }
  14. }
复制代码

作者: 陈冲    时间: 2012-7-15 18:07
本帖最后由 陈冲 于 2012-7-15 18:09 编辑
  1. public class SwapTest{
  2.         public static void main(String[] args) {
  3.                 String[] strings=new String[]{"hello","thanks","bye-bye"};
  4.                 swap(strings,1,2);
  5.                 for(String str:strings){
  6.                         System.out.println(str);
  7.                 }
  8.         }
  9.         private static <T> void swap(T[] a, int i, int j) {
  10.          T tmp=a[i]; //定义一个变量,临时存储数组中的元素,以免在交换的时候,数组元素被覆盖
  11.          a[i]=a[j];//将a[j]的值赋给a[i]如果没有上一行定义的tmp变量的话,a[i]会被a[j]覆盖掉,导致a[i]和a[j]元素的值相同
  12.          a[j]=tmp;//将临时存储的a[i]的值赋给a[j]
  13.         }
  14. }
复制代码
以主函数中的数组为例:
strings={"hello","thanks","bye-bye"}
strings[0]="hello",string[1]="thanks",string[2]="bye-bye"
在调用swap()方法时,交换过程如下:

定义tmp
tmp=string[1];//tmp="thanks";        strings={"hello","thanks","bye-bye"}
string[1]=string[2];//strin1g="bye-bye";strings={"hello","bye-bye","bye-bye"}
string[2]=tmp;//string[2]="thanks";strings={"hello","bye-bye","thanks"}
所以,交换完毕后的数组是strings={"hello","bye-bye","thanks"}

输出结果为
hello
bye-bye
thanks



作者: 全海波    时间: 2012-7-15 18:08
  1. 01.public class SwapTest{

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

  3. 03.                String[] strings=new String[]{"hello","thanks","bye-bye"};

  4. 04.                swap(strings,1,2);

  5. 05.                for(String str:strings){

  6. 06.                        System.out.println(str);

  7. 07.                }

  8. 08.        }

  9. 09.        private static <T> void swap(T[] a, int i, int j) {

  10. 10.         T tmp=a[i];//定义临时量,用于对数的存储,将a[i]的值赋值给tmp

  11. 11.         a[i]=a[j];//将a[j]的值赋值给a[i]

  12. 12.         a[j]=tmp;//将tmp的值赋值给a[j]

  13. 13.        }

  14. 14.}

复制代码

作者: 全海波    时间: 2012-7-15 18:14
添加一个图示例:

作者: 全海波    时间: 2012-7-15 18:15

作者: 杨康    时间: 2012-7-15 18:50
swap(strings, 1, 2);    //调用你定义的功能,把strings,数组中1位置,2位置传入该功能
T temp = a;   //定义一个第三方变量,用来临时存储原来角标为i该位置的数据
  a = a[j];   //将角标j位置的变量的值赋给i位置
  a[j] = temp;    //将临时变量存储的值赋给j位置

如下图标号步骤所示

2.jpg (5.94 KB, 下载次数: 25)

2.jpg





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