黑马程序员技术交流社区

标题: 两个数据交换错误 [打印本页]

作者: 沈样    时间: 2012-2-18 21:22
标题: 两个数据交换错误
本帖最后由 沈样 于 2012-3-3 15:35 编辑

package com.test;
/**
* 这是一个通过异或交换两个数据的程序
* a = a^b;
* b = a^b;
* a = a^b;
* 原理是一个数异或同一个数两次为自己*/

public class SawpTest {
        public static void main(String[] args){
                int a = 1;
                int b = 10;
                SawpTest.Swap(a,b);
                System.out.println("a="+a+"b="+b);
               
               
               
        }
     public static void Swap(int a,int b){
        a = a^b;
        b = a^b;//a^b^b--a
        a = a^b;//a^b^b^a^b--b
        System.out.println("a="+a+"b="+b);
     }
}
为什么方法运行后程序数据没有交换
作者: 左华清    时间: 2012-2-18 21:52
可试试,看看行不行
package cn.itcast.day1;

public class SwapDemo {
       
        public static void main(String[]args){
                int a=1;
                int b=2;
                swap(a,b);
                swap2(a,b);
        }
        /**
         * 通过中是变量交换两个数的值
         * */
        public static void swap(int a,int b){
                int temp=0;
                temp=a;
                a=b;//将a赋值给b
                b=temp;//通过中间变量将a赋值给b
                System.out.println("swap():a="+a+",b="+b);
        }
       
        /**
         * 通过算法交换两个数的值
         * */
        public static void swap2(int a,int b){
                a=a+b;
                b=a-b;
                a=a-b;
                System.out.println("swap2():a="+a+",b="+b);
        }
}
作者: 黄秋    时间: 2012-2-19 01:01
1. java的基本数据类型,是值传递,String也是值传递。数组、集合、列表等高级类型,可看作引用传递,实际上传递的是:对象的地址。
2. 值传递的话,没法将两数交换,只有传地址(引用传递),才能两两交换。
下面是类对象的传递:
  1. public class Test {
  2.         int a,b;

  3.         public static void main(String[] args) {
  4.                 Test t=new Test();
  5.                 t.a=1;
  6.                 t.b=10;
  7.                 Swap(t);
  8.                 System.out.println("a="+t.a+" b="+t.b);
  9.         }
  10.         public static void Swap(Test t){
  11.         t.a = t.a^t.b;
  12.         t.b = t.a^t.b;//a^b^b--a
  13.         t.a = t.a^t.b;//a^b^b^a^b--b
  14.         System.out.println("a="+t.a+" b="+t.b);
  15.     }
  16. }
复制代码





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