关闭

java交换两个数 & 细说"^交换"

标签: 交换
764人阅读 评论(2) 收藏 举报
分类:
今天实验课,老师让写if分支语句对3个数字从小到大排序。我发现java不像C++那样能用引用,指针之类的东西进行交换操作,这可不是什么好事,虽然后来也写出了交换,但是觉得其本质还是的值的拷贝。
异或位运算:
//main()内部:         
         int []p=new int [3];
         Scanner sc= new Scanner (System.in); 
         for(int i=0;i<3;i++){
             p[i]=sc.nextInt();
         }
         if(p[0]>p[1]){
        	 p[0]=p[0]^p[1];
        	 p[1]=p[0]^p[1];
        	 p[0]=p[0]^p[1];
         }

研究一下刚刚仅用两个变量的交换过程:假如我们设中间值t=a^b, 那么有t^a=b, t^b=a 所以交换的话就是a=t^a, b=t^b. 为了仅使用两个变量a,b进行交换,所以有:

a=a^b  (t=a^b)

b=a^b  (a=t^b b'=a)

a=a^b  (b=t^a=t^b' a'=b)

a'和b'就是交换了的值


数组参数:
static void swap(int[]b,int d1,int d2 ){
     if(b[d1]>b[d2]){
    		int t=b[d1];
          	b[d1]=b[d2];
          	b[d2]=t;
     }
}
	 public static void main(String arg[]){
    	 int []p=new int [3];
         Scanner sc= new Scanner (System.in);  	    
         for(int i=0;i<3;i++){
             p[i]=sc.nextInt();
         }
         if(p[0]>p[1]){
         	swap(p,0,1);
         }

用类:
public class Swap {
      int a,b;
      public Swap(int t1,int t2){
    	  this.a=t2;
    	  this.b=t1;
      }
}
//````
      if(p[0]>p[1]){
             wp=new Swap(p[0],p[1]);
             p[0]=wp.a;
             p[1]=wp.b;
      }


1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java中两个数交换的细节问题

在码代码过程中,两个数交换是经常用到的,但在Java 中,如果忽略了值传递和引用传递就很容易出错。 看一下两个整数交换代码: public void swap(int a,int b){ int t=a; a=b; b=t; } 这是不能成功交换两个数的,就算是C、C++也不行,因为这是通过值传递...
  • Mars_NAVY
  • Mars_NAVY
  • 2014-04-21 09:29
  • 3494

java交换两个数的常见方法及效率测试

论两个数的交换的重要性 讨论交换两个数的方法对某些人来说无聊,但某些人很乐意探究,甚至某些面试官喜欢用这个做文章。刚出来找工作笔试的时候我也碰到与之相关的问题。 常见的两个数交换的方法 边赋值边运算 加减减交换 用中间变量交换 异或交换 下面是代码 public class T...
  • qq525099302
  • qq525099302
  • 2015-08-05 11:31
  • 1402

算法实现两个数交换(多种方法)

算法实现两个数交换(多种方法)
  • u012965373
  • u012965373
  • 2016-01-16 21:10
  • 2185

面试题:交换2个数字,要求高效快速.(可用三种方式实现交换2个数字)

交换2个数字一般有三种方式: 第一种是利用一个三方变量temp作为临时变量交换 第二种是利用a+b,a-a之类的方式交换(a+b可能会溢出) 第三种是利用异或运算方式告诉的交换数字 package java基础题目; /* * 问题:交换2个数字,要求高效 * 位异或运算:相同则0(0...
  • u012110719
  • u012110719
  • 2015-06-06 18:56
  • 1057

不使用第三方变量交换两个数值变量的值(java语言)

面试时有时候会遇到的面试题,但其意义没多大!本文来源网络,整理由jast。 方法一、二 参考:此处 方法三 参考:此处 方法一、算术运算 简单来说,就是通过普通的+和-运算来实现。代码如下:  int a,b;  a=10;b=12;  a=b-a; //a=2;b=1...
  • HelloWorld90
  • HelloWorld90
  • 2014-02-24 14:51
  • 825

C++交换两个数总结

习题:实现两个整数的交换。方法1:设置中间变量#include<iostream> using namespace std; int main() { int a,b,c; cout<<"Please input two numbers:"...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2016-03-26 00:26
  • 3775

异或运算实现两个数的交换

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: &...
  • heathyhuhu
  • heathyhuhu
  • 2013-10-15 08:32
  • 13125

经典算法学习——交换两个整型数据

交换两个数是在编程中经常会用到的,当然我们可以用很常见的方式来实现,也可以各种稀奇古怪的方法来做。这里我们用三种比较常规的方式来做,太过古怪的方法个人觉得没有太大必要。实例代码上传至:https://github.com/chenyufeng1991/SwapFunction(1)使用指针实现如下:...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016-02-03 22:17
  • 2355

C语言中如何用指针交换两个数的大小

如何用传址的方式交换两个数的大小 首先先看第一个程序,用函数的调用来解决看似正确实则运行出来的结果是错误的 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include int JH(int x, int y); int main() { ...
  • persistence_s
  • persistence_s
  • 2016-10-01 11:04
  • 1531

c语言中不需要中间变量就能实现两个数交换的几种算法

第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种: (1)加减法。 a = a + b; b = a - b; a = a - b; 该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如对数据: a = 3.123456 b...
  • Mormont
  • Mormont
  • 2016-12-17 22:07
  • 1854
    个人资料
    • 访问:331304次
    • 积分:8856
    • 等级:
    • 排名:第2517名
    • 原创:575篇
    • 转载:13篇
    • 译文:0篇
    • 评论:36条
    我的链接
    最新评论