我正在编写一个计算势能变化的复杂程序(Δ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,则交换它们的值。我应该采用什么概念?
答案 0 :(得分:1)
将其中一个变量存储在temp变量中,然后交换它们:
if (sH > fH) {
var temp = sH;
sh = fH;
fH = temp;
}
答案 1 :(得分:1)
假设你这样做的原因是ch
在这里不是负面的:
double ch = fH - sH;
得到绝对值:
double ch = Math.Abs(fH - sH);
答案 2 :(得分: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;
}
}
答案 3 :(得分:1)
交换sH和sF的值:
sH = Interlocked.Exchange(ref sF,sH);
类 Interlocked 在 System.Threading 命名空间中声明。
它允许在一行中交换变量。交换是原子的,线程安全的。
就性能而言,它比使用temp变量的交换稍微“慢”。它仍然很快。 除非在纳米级别进行极端优化,否则不应该担心。
答案 4 :(得分:0)
呃...将A复制到tmp变量中,将B复制到A中,将tmp复制到B中?由于你正在处理强大的解析,我不能看到像xor-swap那样疯狂(通过不安全的整数处理)是有必要的。
答案 5 :(得分:0)
if (sH > fH) {
double temp = sH;
sH = fH;
fH = temp;
}
可以使用临时第三个变量来完成交换。将sH存储在临时变量中并将sH分配给fH。这样,重新分配时,sH的值被缓存而不会丢失。最后,将fH指定给temp。现在交换了这些值。
希望这有帮助
答案 6 :(得分:-2)
试试这个,但这不如使用临时变量快:
if (sH > fH)
{
sH -= fH;
fH += sH;
sH = fH - sH;
}