日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

不使用中间变量交换两个数(Java版)

發(fā)布時間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 不使用中间变量交换两个数(Java版) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

在程序中實現(xiàn)交換兩個數(shù)的功能并不復(fù)雜,但如果不使用中間變量,就需要動一下腦筋。在本文介紹了兩個方法(其實原理都是一個)。其基本原理就是數(shù)的中和。 也就是說,通過某種運算(二元運算)將a和b兩個數(shù)變成一個數(shù),并保存在其中一個變量中。然后再通過同樣的運算符將a或b中和掉。這樣實際上是利用了a或 b本身作為了中間變量。
先看第一個算法。
staticclassNum
{
inta;
intb;
}
publicstaticvoidswap1(Numnum)
{

num.a=num.a+num.b;
num.b=num.a-num.b;
num.a=num.a-num.b;
}

上面代碼通過“+”運算符將a和b的運算結(jié)果賦給了a(這時a是中間變量)。然后再計算b,這時a的值已經(jīng)是(a+b)了,因此,a再減b就是原來的a。 而這時b已經(jīng)是原來的a了,因此,再用運算后的a(實際上是a+b)減運算后的b(實際上是原來的a),就是原來的b了,最后將這個b賦值給a。
實際上,我們還可以使用“*”、“/”等符號來實現(xiàn)同樣的效果,代碼如下:

publicstaticvoidswap2(Numnum)
{
num.a=num.a*num.b;
num.b=num.a/num.b;
num.a=num.a/num.b;
}
publicstaticvoidswap3(Numnum)
{
num.a=num.a-num.b;
num.b=num.a+num.b;
num.a=num.b-num.a;
}
上面代碼在Java中沒有什么問題(但使用“/”時,分母和分子不能為0)。就算溢出也會得到正確的結(jié)果,但有某些語言中(如C語言),可能會拋出溢出錯誤,不了避免這種錯誤。可以加判斷,代碼如下:
publicstaticvoidswap4(Numnum)
{
//不同符號
if(num.a*num.b<=0)
{
num.a=num.a+num.b;
num.b=num.a-num.b;
num.a=num.a-num.b;
}
else
{

num.a=num.a-num.b;
num.b=num.a+num.b;
num.a=num.b-num.a;
}
} 當然,我們還有更好的方法,就是使用異或運算符,我們知道,任何數(shù)與0異或后仍然為它本身,兩個相同的數(shù)異或后為0。根本這種特性,可以有如下代碼。

publicstaticvoidswap5(Numnum)
{
num.a=num.a^num.b;
num.b=num.a^num.b;
num.a=num.a^num.b;
}

總結(jié)

以上是生活随笔為你收集整理的不使用中间变量交换两个数(Java版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。