Java 两数互换不同解法解释

我们先来看一种方法: 


public class Demo {
    int x=100;
    int y=200;//定义x和y的值
    public void xchan(int x,int y){
        int z=x;
        x=y;
        y=z;//令x和y进行互换
        System.out.println("x="+x);//输出换之后x的值
        System.out.println("y="+y);//输出换之后y的值
    }
    public static void main(String[] args) {
     Demo obj=new Demo();//面向对象
     obj.xchan(obj.x,obj.y);指向Demo里面的x和y
    }
    
}

第一种的延伸:


public class Demo {
   int a=100;
   int b=200;
   public void show(){
       System.out.println("a="+a);
       System.out.println("b="+b);
   }
   public void xch(int x,int y){
       int z=x;
       x=y;
       y=z;
       a=x;
       b=y;
   }
    public static void main(String[] args) {
    Demo obj=new Demo();
    obj.xch(obj.a,obj.b);
    obj.show();
    }
    
}

第二种:(用和互换)


public class Demo {
   int a=100;
   int b=200;
   public void show(){
       System.out.println("a="+a);
       System.out.println("b="+b);
   }
   public void xch(int x,int y){
      x=x+y;
      y=x-y;
      x=x-y;
      a=x;
      b=y;
   }
    public static void main(String[] args) {
    Demo obj=new Demo();
    obj.xch(obj.a,obj.b);
    obj.show();
    }
    
}

第三种:(用异或运算)


public class Demo {
   int a=100;
   int b=200;
   public void show(){
       System.out.println("a="+a);
       System.out.println("b="+b);
   }
   public void xch(int x,int y){
      x=x^y;
      y=x^y;
      x=x^y;
      a=x;
      b=y;
   }
    public static void main(String[] args) {
    Demo obj=new Demo();
    obj.xch(obj.a,obj.b);
    obj.show();
    }
    
}

另外(拓展):

如果程序里形参实参用的同样的变量但是没有回到本类,如:


public class Demo {
   int a=100;
   int b=200;
   public void show(){
       System.out.println("a="+a);
       System.out.println("b="+b);
   }
   public void xch(int a,int b){
      a=a+b;
      b=a-b;
      a=a-b;
   }
    public static void main(String[] args) {
    Demo obj=new Demo();
    obj.xch(obj.a,obj.b);
    obj.show();
    }
    
}

这个时候两数并没有互换,是因为同样的变量名程序并不知道引用的是哪个,所以就默认的是本类的,那么它在xch这个类里面进行互换运算之后就没了,并没有对本类的值有影响,如果想要用,应该引用本类的,如:


public class Demo {
   int a=100;
   int b=200;
   public void show(){
       System.out.println("a="+a);
       System.out.println("b="+b);
   }
   public void xch(int a,int b){
      a=a+b;
      b=a-b;
      a=a-b;
      this.a=a;//本类变量
      this.b=b;//本类变量(实际上就这一点不同)
   }
    public static void main(String[] args) {
    Demo obj=new Demo();
    obj.xch(obj.a,obj.b);
    obj.show();
    }
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值