1. 程式人生 > >如何用Java寫一個交換函式

如何用Java寫一個交換函式

最近在寫Java時突然遇到一個問題,就是怎樣在Java中寫一個函式,實現兩個數的交換,這個問題在學習C或者C++的時候我們常用來描述值傳遞和地址傳遞的區別,例如在C++中這個函式可以這樣寫:

//cpp
void swap(int &a,int &b){
     int temp=a;
     a=b;
     b=temp;}

C語言可以用指標進行地址傳遞實現同樣的功能。但是Java中並沒有指標,而且引用也不能直接操作基本資料型別。難道可以直接寫成這樣麼?

//Java
public void swap(int a,int b){
     int temp=a;
     a=b;
     b=temp;}

答案是顯而易見的,這個swap函式和C/C++的值傳遞一樣,並不能實現交換的效果。通過在網上找資料,我發現了一種比較巧妙的方法來實現這個問題。

//Java
public void swap(int [] a){
     int temp=a[0];
     a[0]=a[1];
     a[1]=temp;}

在呼叫時,需要新建一個長度為2的陣列,將需要交換的兩個放到數組裡面去,並將陣列作為引數 , 例如將a=1,b=2進行交換:

//Java
int a=1;
int b=2;
int arraySwap[]=new int[2];
arraySwap[0]=a;
arraySwap[1]=b;
swap(arraySwap);
a=arraySwap[0
]; b=arraySwap[1]; //運算的結果:a=2,b=1

通過陣列的方式只是其中一種方法,還可以通過成員變數的方式來實現。雖然這是一個很簡單的問題,但是卻很容易被忽視,我自己還真的沒有想到。這裡面也有一個小小的問題,雖然在Java可以實現和C/C++同樣效果的交換函式,但是程式碼卻複雜了很多,這樣反而沒有單獨將其寫成一個函式的必要了,雖然邏輯上清晰了很多。儘管Java取消了指標,但是有時候也會給我們的程式設計帶來一些小小的麻煩吧。