2013-06-30 66 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声明命名空间。

它允许交换一行中的变量。交换是原子的,线程安全的。

就性能而言,它比使用临时变量交换有点“慢”。它仍然是照明快速的。 除非在纳米级别进行极端优化,否则不应该担心。