亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

交換兩個變量而不使用臨時變量

交換兩個變量而不使用臨時變量

HUWWW 2019-10-17 15:38:43
我希望能夠在不使用C#中使用臨時變量的情況下交換兩個變量。能做到嗎?decimal startAngle = Convert.ToDecimal(159.9);decimal stopAngle = Convert.ToDecimal(355.87);// Swap each://   startAngle becomes: 355.87//   stopAngle becomes: 159.9
查看完整描述

3 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

首先,在C#語言中不使用臨時變量進行交換是一個非常糟糕的主意。


但是為了答案,您可以使用以下代碼:


startAngle = startAngle + stopAngle;

stopAngle = startAngle - stopAngle;

startAngle = startAngle - stopAngle;

但是,如果兩個數字相差很大,則四舍五入會出現問題。這是由于浮點數的性質。


如果要隱藏臨時變量,可以使用實用程序方法:


public static class Foo {


    public static void Swap<T> (ref T lhs, ref T rhs) {

        T temp = lhs;

        lhs = rhs;

        rhs = temp;

    }

}


查看完整回答
反對 回復 2019-10-17
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

交換兩個變量的正確方法是:


decimal tempDecimal = startAngle;

startAngle = stopAngle;

stopAngle = tempDecimal;

換句話說,使用一個臨時變量。


你有它。沒有聰明的花招,沒有代碼的維護者來詛咒您數十年,沒有進入The Daily WTF的條目,也沒有花費太多的時間試圖找出為什么需要一次操作,因為從最低的角度來看,甚至語言最復雜的功能是一系列簡單的操作。


只是一個非常簡單,易讀,易于理解的t = a; a = b; b = t;解決方案。


在我看來,開發人員嘗試使用技巧來“交換變量而不使用臨時變量”或“ Duff的設備”,這只是在試圖展示它們的聰明程度(并失敗了)。


我把它們比作那些閱讀粗俗書籍的人,這些閱讀純粹是為了在聚會上顯得更加有趣(而不是擴大視野)。


與簡單的“臨時變量”解決方案(使用算術/布爾運算而不是在匯編級進行簡單移動)相比,在其中添加和減去的解決方案或基于XOR的解決方案可讀性較低,并且很可能會變慢。


通過編寫高質量的可讀代碼來為自己和他人提供服務。


那是我的怒吼。謝謝收聽 :-)


順便說一句,我很清楚這不能回答您的特定問題(對此我會道歉),但是在SO上有很多先例,人們問過如何做某事,正確的答案是“不要做到”。


查看完整回答
反對 回復 2019-10-17
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

是的,使用此代碼:


stopAngle = Convert.ToDecimal(159.9);

startAngle = Convert.ToDecimal(355.87);

對于任意值,此問題更加困難。:-)


查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 636 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號