Java 方法的參數(shù)是簡單類型的時(shí)候,是按值傳遞的 (pass by value),所以Java里面不能實(shí)現(xiàn)和C中一樣的swap方法來交換兩個(gè)數(shù)的值。非要用的話只能這樣寫:
//交換數(shù)組data中的第a和第b個(gè)元素
public static void swap(int[] data, int a, int b) {
int t = data[a];
data[a] = data[b];
data[b] = t;
} 估計(jì)不是你想要的效果。
關(guān)于Java中參數(shù)和引用的問題建議看看下面的博文:
/zw_2011/article/details/6431448
將兩個(gè)數(shù)進(jìn)行互換的方法有兩種形式:
1、借助中間變量完成,此方法直觀,易理解,使用最多
2、不需要中間變量,通過變量身的運(yùn)算完成交換。
參考代碼:
方法1:
int a=2,b=3,t;
t=a; //先將a存儲到臨時(shí)變量t中
a=b; //將b存儲到a中
b=t; //將臨時(shí)變量中的原a值存儲到b中
printf("a=%d b=%d\n", a,b );
方法2:
int a=2,b=3,t;
a += b ; //把兩數(shù)之和存到a中
b= a-b ; //用兩數(shù)和減去b可得原a,存儲到b中
a= a-b ; //因?yàn)閎現(xiàn)在是原a值,所以,用兩數(shù)和減去b(原a)可得 原b,存儲到a中
此方法,還可以用異或運(yùn)算來實(shí)現(xiàn),原理相同。
編程中有時(shí)會需要交換兩個(gè)變量的值,之前常用的方法就是利用一個(gè)臨時(shí)變量作為中間值交換,并且一直受限于現(xiàn)實(shí)中兩瓶油交換的思維,認(rèn)為這是唯一的方法,但在編程中真的如此嗎?假設(shè):int a=1;int b=2;現(xiàn)在需要交換兩個(gè)int變量的值 1.常用的方法,使用臨時(shí)變量:int c = a;a = b;b = c;這是常用的也是最容易想到的方法。
2.運(yùn)用位運(yùn)算^:a^=b;b^=a;a^=b;或者a=a^b;b=a^b;a=a^b;我的理解:^即異或操作符,相同為0,不同為1,對于二進(jìn)制有三種形式,即: m=0, n=0; 第一次計(jì)算m^n結(jié)果m=0,第二次計(jì)算n^=m結(jié)果為0,即是m原來的值。 m=0, n=1; 第一次計(jì)算m^n結(jié)果m=1,第二次計(jì)算n^=m結(jié)果為0,還是m原來的值。
m=1, n=1; 第一次計(jì)算m^n結(jié)果m=0,第二次計(jì)算n^=m結(jié)果為1,還是m原來的值。 變量名只是代號,不考慮順序,只有三種形式。
由此得出結(jié)論位m與另一位n進(jìn)行異或運(yùn)算兩次之后表達(dá)式(m^n)^n的值仍為原來的值,將這個(gè)值賦給另一個(gè)變量就實(shí)現(xiàn)交換。 由于計(jì)算機(jī)中數(shù)值表示形式為二進(jìn)制,由一位推廣至8、16、32位,結(jié)論不變,因此對于int值來說也實(shí)現(xiàn)了交換。
3.運(yùn)用算術(shù)運(yùn)算,容易理解,也挺巧妙:a=a+b;b=a-b;//b=(a+b)-b a=a-b;//a=a+b-((a+b)-b) 三種方案第二種最優(yōu),但不太好理解,第三種次之,最容易理解的屬第一種方案,但空間及時(shí)間開銷較大。附:異或值表輸入運(yùn)算符輸入結(jié)果1^011^100^000^11。
#include
#include
#include
int fun1(int *a,int *b)
{
int temp;
if(*a>=*b)
{
temp=*a;
}
else
{
temp=*b;
}
return(temp);
}
int main(void)
{
int a=2;
int b=1;
printf("a=%d,b=%d\n",a,b);
fun2(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
一、線路交換
所謂線路交換是通過網(wǎng)絡(luò)中的節(jié)點(diǎn)在兩個(gè)站之間建立一條專用的通訊線路。如圖1的電話系統(tǒng),這種線路交換系統(tǒng),在兩個(gè)站之間有一個(gè)實(shí)際的物理連接,這種連接是節(jié)點(diǎn)之間的連接序列。在傳輸任何數(shù)據(jù)之間都必須建立點(diǎn)到點(diǎn)的線路。如站1發(fā)送一個(gè)請求到節(jié)點(diǎn)2,請求與站點(diǎn)2建立一個(gè)連接,那么站點(diǎn)1到節(jié)點(diǎn)1是一條專用線路。在交換機(jī)上分配一個(gè)專用的通道連接到節(jié)點(diǎn)2再到站點(diǎn)2的通訊。至此就建立了一條從站點(diǎn)1經(jīng)過節(jié)點(diǎn)2再到站點(diǎn)2的通訊物理通道。這樣就可以將話音從站點(diǎn)1傳送到站點(diǎn)2了,一般來說這種連接是全雙工的,可以在兩個(gè)方向傳輸話音(數(shù)據(jù))。
二、報(bào)文交換
這種交換方式不需要在兩個(gè)站點(diǎn)之間建立一條專用通路,如果一個(gè)站想要向站點(diǎn)2發(fā)送一個(gè)報(bào)文(信息的一個(gè)邏輯單位),它把站點(diǎn)2的地址(編碼方式,叫做地址碼)附加在要發(fā)送的報(bào)文上。然后把報(bào)文通過網(wǎng)絡(luò)從節(jié)點(diǎn)到節(jié)點(diǎn)進(jìn)行發(fā)送,在每個(gè)節(jié)點(diǎn)中(如要通過多個(gè)節(jié)點(diǎn)才能發(fā)送到站點(diǎn)2)完整地接收整個(gè)報(bào)文且暫存這個(gè)報(bào)文,然后再發(fā)送到下一個(gè)節(jié)點(diǎn)。在交換網(wǎng)中,每個(gè)節(jié)點(diǎn)是一個(gè)電子或機(jī)電結(jié)合的交換設(shè)備,每個(gè)節(jié)點(diǎn)通常是一臺通用的小型計(jì)算機(jī)。它具有足夠的存儲容量來緩存進(jìn)入的報(bào)文。一個(gè)報(bào)文在每個(gè)節(jié)點(diǎn)的延遲時(shí)間等于接收報(bào)文的所有位所需要的時(shí)間,加上等待時(shí)間和重傳到下一節(jié)點(diǎn)所需要的排隊(duì)延時(shí)時(shí)間。
報(bào)文交換有以下優(yōu)點(diǎn)
1、線路效率較高,這是因?yàn)樵S多報(bào)文可以用分時(shí)方式共享一條節(jié)點(diǎn)到節(jié)點(diǎn)的通道。
2、不需要同時(shí)使用發(fā)送器和接收器來傳輸數(shù)據(jù),網(wǎng)絡(luò)可以在接收器可用之前暫時(shí)存儲這個(gè)報(bào)文。
3、在線路交換網(wǎng)上,當(dāng)通訊量變得很大時(shí),就不能接受某些呼叫。而在報(bào)文交換上卻仍然可以接收報(bào)文,只是傳送延遲會增加。
4、報(bào)文交換系統(tǒng)可以把一個(gè)報(bào)文發(fā)送到多個(gè)目的地。
5、能夠建立報(bào)文的優(yōu)先權(quán)。
6、報(bào)文交換網(wǎng)可以進(jìn)行速度和代碼的轉(zhuǎn)換,因?yàn)槊總€(gè)站都可以用它特有的數(shù)據(jù)傳輸率連接到其他點(diǎn),所以兩個(gè)不同傳輸率的站也可以連接,另外還可以轉(zhuǎn)換傳輸數(shù)據(jù)的格式。
三、分組交換
分組交換方式兼有報(bào)文交換和線路交換的優(yōu)點(diǎn)。其形式上非常像報(bào)文交換。主要差別在于分組交換網(wǎng)中要限制傳輸?shù)臄?shù)據(jù)單位長度,一般在報(bào)文交換系統(tǒng)中可傳送的報(bào)文數(shù)據(jù)位數(shù)可做得很長,而在分組交換中,傳送報(bào)文的最大長度是有限制的,如超出某一長度,報(bào)文必須要分割成較少的單位,然后依次發(fā)送,我們通常稱這些較少的數(shù)據(jù)單位為分組。這就是報(bào)文交換與分組交換所不同之處。
void swap (int &x,int &y){int a; a=x;x=y;y=a;}#include void main(){ int x,y; scanf("%d %d",&x,&y); swap (x,y); printf("%d %d",x,y);}首先,swap函數(shù)在沒有定義返回值類型時(shí),編譯器會默認(rèn)返回int類型,所以加void無返回類型就正確。
其次,樓主的參數(shù)傳遞是值傳遞,不會交換兩個(gè)數(shù),參數(shù)可以使用引用傳遞,如我的改動,也可以以指針傳遞;希望對樓主有幫助;。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請?jiān)谝粋€(gè)月內(nèi)通知我們,我們會及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:2.760秒