如何用Java寫一個交換函式
阿新 • • 發佈:2019-01-26
最近在寫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取消了指標,但是有時候也會給我們的程式設計帶來一些小小的麻煩吧。