java中如何实现swap(int a,int b)

转载 2013年12月02日 16:32:03

在C/C++里面交换值的方法:

1
2
3
4
5
6
7
8
[cpp] view plaincopyprint?
void swap(int&a ,int&b)  
{  
    int temp;  
    temp = a;  
    a = b;  
    b = temp;  
}

但在JAVA中用这种方法是行不通的,因为“Java对普通类型的变量是不支持引用传递的”。

怎么办呢?


1. 可以像下面这样通过传数组(也属于传值)的方法来完成对换(在很多排序算法里面就是这么干的):

1
2
3
4
5
6
[java] view plaincopyprint?
public static void swap(int[] data, int a, int b) {  
        int t = data[a];  
        data[a] = data[b];  
        data[b] = t;  
    }


2. 也可以通过重新定义个类(在JAVA中我们可以通过使用int的包装类---Integer,然后将其作为值的引用传到函数中,但这个Integer包装类也不允许你来改变它的数据域;但这不防碍我们用自己的包装类,比如说下面实现的MyInteger):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//MyInteger: 与Integer有些类似,但是其对象可以变值  
class MyInteger {     
    private int x;    // 将x作为唯一的数据成员   
    public MyInteger(int xIn) { x = xIn; } // 构造器   
    public int getValue() { return x; }  // 得到值    
    public void insertValue(int xIn) { x = xIn;} // 改变值  
}  
     
public class Swapping {     
    // swap: 传对象引用   
    static void swap(MyInteger rWrap, MyInteger sWrap) {        
        // 变值过程       
        int t = rWrap.getValue();        
        rWrap.insertValue(sWrap.getValue());        
        sWrap.insertValue(t);     
    }     
    public static void main(String[] args) {        
        int a = 23, b = 47;        
        System.out.println("Before. a:" + a + ", b: " + b);        
        MyInteger aWrap = new MyInteger(a);        
        MyInteger bWrap = new MyInteger(b);        
        swap(aWrap, bWrap);        
        a = aWrap.getValue();        
        b = bWrap.getValue();        
        System.out.println("After.  a:" + a + ", b: " + b);     
    }  
}


3. 由于java 中的参数传递都是采用的值传递方式,这不防碍我们用swap的时候采用外部内联的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[java] view plaincopyprint?
public class Swap2 {   
    public static void main(String args[]){   
        Swap2 sw = new Swap2(1,2);   
        System.out.println("i is" + sw.i);   
        System.out.println("j is" + sw.j);   
        sw.swap();   
        System.out.println("i is" + sw.i);   
        System.out.println("j is" + sw.j);   
    }   
    int i,j;   
    public Swap2(int i, int j){   
        this.i = i;   
        this.j = j;   
    }   
    
    public  void swap(){   
        int temp;   
        temp = i;   
        i = j;   
        j = temp;   
    }   
}   
    
public class Swap1 {   
    public static void Swap1(Integer a, Integer b){   
        Integer temp = a;   
        a = b;   
        b = temp;   
    }   
    public  static  void main(String args[]){   
        Integer a,b;   
        a = new Integer(10);   
        b = new Integer(20);   
        Swap1.Swap1(a, b);   
        System.out.println("a is " + a);   
        System.out.println("b is " + b);   
    }   
}

转载于:xc145214

Integer 变量A,B, 在不声明其它变量的情况下,将他们的值交换,如:A:=1; B:=2; 交换后, A=2, B=1,

package day01; public class Test1 { public static void main(String[] args) { //不利用其它变量时期A和B的值交换 ...
  • u012110719
  • u012110719
  • 2015年07月27日 13:32
  • 1406

[LIST]ArrayList的自定义排序方法

ArrayList的自定义排序方法Java.util.Collections.sort(List list)与Comparable,Comparator 接口 调用java.util.Collecti...
  • szwangdf
  • szwangdf
  • 2011年05月08日 10:22
  • 6718

交换两个数的函数int swap(int &a,int &b)

最近突然想到以前看的交换两个整数的巧妙写法的限制条件忘了,所以就再看了一遍: #include using namespace std; int a[]={1,2,3,4}; void sw...
  • chen895281773
  • chen895281773
  • 2012年08月16日 16:44
  • 4129

C 语言swap(a,b)值交换的几种实现方法

从学习开始,就开始学习C语言。书本上介绍的swap程序很基础,我在网络上查看了关于swap程序的设计。 有很多,列举了以下四种方法。 //以下是原程序,VC++6.0编译通过。 /*******...
  • Scalpelct
  • Scalpelct
  • 2016年08月17日 00:55
  • 1398

关于四个swap函数的归类

    在学习C语言函数那一章节的时候我们第一次认识了swap。当时书上举这个例子是为了说明函数的“单向值传递”原理,即在函数调用的时候,实参总是将自己的值单向传递给形参,而不能反过来,并且在这个过程...
  • collier
  • collier
  • 2010年09月04日 09:57
  • 2751

练习2: 通过交换函数的实现,学习指针的用法。

练习2 指针的学习 看下面的程序,要明确明白为何swap1不起作用,swap2有效. #include "stdafx.h" void swap1(int a, int b) { int te...
  • swpluto
  • swpluto
  • 2015年04月10日 09:53
  • 193

java中实现swap函数的几种方式

java中实现swap解决方案由于java中“对基本类型的变量是不支持引用传递的”,所以根本不能像c/c++那样直接传地址,但是可以如下解决: 1.使用数组传值public class TestSw...
  • u014028392
  • u014028392
  • 2017年10月24日 10:32
  • 509

参数 void aa(int a,int b) 与 void aa(int* a,int* b) 与 void aa(int& a,int& b)区别

void aa(int a,int b) 调用 aa(a,b)   void aa(int* a,int* b) 调用aa(&)
  • hutao1101175783
  • hutao1101175783
  • 2014年04月27日 17:29
  • 1167

int*a, int& b, int* &c, int& *d

上述的四条语句,前面两个很好理解,而后面两个,大部分C++初学者都会比较困惑,今天我也是查阅了一些资料以后才恍然大悟。下面具体来说明一下: int i; int *a = &i;//这里a是一个指...
  • abcd1f2
  • abcd1f2
  • 2015年03月31日 15:11
  • 627

Java题,class A { static int x; } class B { A a = new A(); a.x=1; }错在哪

Java题,class A { static int x; } class B { A a = new A(); a.x=1; }错在哪  分享| 2015-05-12 11:07harm2...
  • evilcry2012
  • evilcry2012
  • 2016年01月25日 13:05
  • 845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中如何实现swap(int a,int b)
举报原因:
原因补充:

(最多只允许输入30个字)