奇怪的逻辑错误C#

时间:2017-03-22 22:05:38

标签: c# visual-studio

我不知道为什么这段代码只迭代一次,我试过让y> = 0并且只是把它放到一个无限循环中。程序应该每10秒显示一次射弹的高度。任何帮助将不胜感激。

h = double.Parse(HBox.Text);
v = double.Parse(VBox.Text);
g = -32;
t = 0.1;
y = 0;


for (t = 0.1; y <= 0; t += 0.1)
 {
  y = (-1 / 2.0) * g * (Math.Pow(t, 2) + (v * t) + h);
  timeBox.Items.Add(y.ToString());

 }

3 个答案:

答案 0 :(得分:2)

代码只迭代一次因为你有条件<= 0;就射弹来说,它是在环绕地面时循环播放的#34;以>= 0为条件(地面上的抛射物),你走在正确的轨道上,除非你的公式错了。

整合gt + v会为您提供0.5gt^2 + vt,请注意0.5 正面。你的代码中有负数(可能是因为那个给你公式加速的人因重力为正)。切换,或使重力为正,并使代码有条件:

for (t = 0.1; y >= 0; t += 0.1)
{
      y = 0.5 * g * Math.Pow(t, 2) + (v * t) + h);
      timeBox.Items.Add(y.ToString());   
}

你也错放了一些括号; Math.Pow上方代码中的注意事项与重力相乘,因为它应该是,您将其添加到(v * t) + h,这绝对不一样。如果您不想在最后打印负高度,则需要在输出之前进行检查:

if (y > 0)
{
   timeBox.Items.Add(y.ToString());  
}

答案 1 :(得分:0)

你的for循环正在迭代i,但是它使用y来检查它是否应该运行。

它从0开始,所以它运行一次,然后你有一个负数* g,它会吐出一个正数。 y&lt; = 0现在为假。这也是你获得无限循环的原因。

答案 2 :(得分:0)

在你的循环中,你应该检查t的值(跟踪时间),直到达到1(1秒)。

for (t = 0.1; t <= 1; t += 0.1)
{
    ...
}