我正在制作一个非常简单的Java程序,用于计算在不同角度和速度下发射时射弹的行进距离。虽然在谈论发射角时没有必要包括180度以上的角度,但我想知道为什么我的代码没有按照我期望的方式工作,特别是以下部分:
if((int)(angle / 180.0) % 2 != 0)
{
myDataArray[i][j] = 0.0;
}
如果angle是180到360(不包括)之间的值,那么它应该满足条件,任何等效角度都应该满足(例如540到720不包括)。基本上,每当射击角落入地面时,距离值应为零。
其余代码工作正常,但所有角度值180及以上都满足此部分,这意味着所有这些距离都为零。 (这没有意义,因为365度发射角应该与5度发射角相同)。
我做错了什么,或者是否有可以用来获得所需结果的替代条件?
编辑:巨大的叹息.... 计算没问题,我只是个白痴。我将角度增量器放在else语句中,这意味着if语句读取的第一个角度将用于程序的其余部分。这是我的整个方法代码:public void calcDistanceValues()
{
double angleStart = myAngleDegrees;
double speedStart = mySpeedMPH;
for(int i = 0; i < myNumRows; i++)
{
for(int j = 0; j < myNumColumns; j++)
{
if((int)(myAngleDegrees / 180.0) % 2 != 0)
{
myDataArray[i][j] = 0.0;
}
else
{
myDataArray[i][j] = 5280 * (Math.pow(mySpeedMPH,2)*Math.sin(2*Math.toRadians(myAngleDegrees))/78973);
myAngleDegrees += myUnitIncrement; //the problem is here*
}
}
mySpeedMPH += myUnitIncrement;
myAngleDegrees = angleStart;
}
mySpeedMPH = speedStart;
}
答案 0 :(得分:3)
我认为测试是正确的,错误在于如何使用它。我写了一个简单的测试程序来试试:
public class Test {
public static void main(String[] args) {
test(0);
test(179);
test(180);
test(181.0001);
test(359);
test(360.0001);
test(180+360);
}
private static void test(double angle){
System.out.println("Raw angle: "+angle+" modded: "+modAngle(angle));
}
private static double modAngle(double angle) {
if ((int) (angle / 180.0) % 2 != 0) {
return 0;
} else {
return angle;
}
}
}
结果是:
Raw angle: 0.0 modded: 0.0
Raw angle: 179.0 modded: 179.0
Raw angle: 180.0 modded: 0.0
Raw angle: 181.0001 modded: 0.0
Raw angle: 359.0 modded: 0.0
Raw angle: 360.0001 modded: 360.0001
Raw angle: 540.0 modded: 0.0
如果我了解您的要求,它似乎正在发挥作用。