2013-06-30 67 views
-4

我在寫一個計算勢能變化的複雜程序(ΔPE=mgΔh)。如何交換兩個變量值?

Console.WriteLine("Mass in kg"); 
string cmMa = Console.ReadLine(); 
double cMass; 
if(!Double.TryParse(cmMa, out cMass)) 
{ 
    Console.WriteLine("Only numbers!"); 
    Console.ReadLine(); 
} 
Console.WriteLine("First height in m"); 
string cfH = Console.ReadLine(); 
double fH; 
if(!Double.TryParse(cfH, out fH)) 
{ 
    Console.WriteLine("Only numbers!"); 
    Console.ReadLine(); 
} 
Console.WriteLine("Second height in m"); 
string csH = Console.ReadLine(); 
double sH; 
if(!Double.TryParse(csH, out sH)) 
{ 
    Console.WriteLine("Only numbers!"); 
    Console.ReadLine(); 
} 
double ch = fH - sH; 
Console.WriteLine("Intermediate result: Change in height(Δh)= "+ch+" m"); 
Console.ReadLine(); 
double ng = 9.81; // m/s^2 
Console.WriteLine("CHANGE IN POTENTIAL ENERGY: "+ch*cMass*ng+" J"); 

最後,我想添加一個if語句,如果sH> fH,那麼它們的值被交換。我應該申請什麼概念?

+2

很平凡:使用第三個變量。這裏沒有概念。 –

+0

'double ch = Math.Abs​​(fH - sH);' – Ryan

+0

[不使用臨時變量交換兩個變量]的可能重複(http://stackoverflow.com/questions/804706/swap-two-variables-without-使用溫度變量) –

回答

0
if (sH > fH) { 
    double temp = sH; 
    sH = fH; 
    fH = temp; 
} 

交換可以通過使用臨時的第三個變量來完成。將sH存儲在臨時變量中,並將sH分配給fH。這樣,重新分配時,sH的值被緩存並且不會丟失。最後,將fH分配給溫度。這些值現在被交換。

希望這有助於

1

存放在一個臨時變量的變量之一,然後交換他們:

if (sH > fH) { 
    var temp = sH; 
    sh = fH; 
    fH = temp; 
} 
0

呃......一個複製到TMP變量,複製B插入A,複製tmp目錄分爲B?既然你正在處理強大的解析,我看不出有什麼像xor-swap(通過不安全的整數處理)那樣瘋狂。

1

假設你這樣做的目的是爲了讓ch不爲負的位置:

double ch = fH - sH; 

剛剛得到的絕對值:

double ch = Math.Abs(fH - sH); 
-2

試試這個,但這不如使用臨時變量那麼快:

if (sH > fH) 
{ 
    sH -= fH; 
    fH += sH; 
    sH = fH - sH; 
} 
1

使用:

static void Main(string[] args) 
{ 
    Console.WriteLine("please imput number 1 "); 
    int a = Convert.ToInt32(Console.ReadLine()); 
    Console.WriteLine("please imput number 2 "); 
    int b = Convert.ToInt32(Console.ReadLine()); 

    if (a > b) 
    { 
     int temp1 = a; 
     int temp2 = b; 
     b = temp1; 
     a = temp2; 
    } 
} 
1

要交換SH和SF的值:

SH = Interlocked.Exchange(參考標誌SF,SH);互鎖

的System.Threading聲明命名空間。

它允許交換一行中的變量。交換是原子的,線程安全的。

就性能而言,它比使用臨時變量交換有點「慢」。它仍然是照明快速的。 除非在納米級別進行極端優化,否則不應該擔心。