我不知道为什么这段代码只迭代一次,我试过让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());
}
答案 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)
{
...
}