0

我正在制作一个非常简单的 Java 程序,用于计算弹丸以不同的角度和速度发射时的行进距离。虽然在谈论发射角度时没有必要包括超过 180 度的角度,但我想知道为什么我的代码没有按照我期望的方式工作,特别是以下部分:

if((int)(angle / 180.0) % 2 != 0)
{
     myDataArray[i][j] = 0.0;
}

如果角度是介于 180 和 360(不包括在内)之间的值,那么它应该满足条件,任何等效角度(例如 540 到 720 不包括在内)也应该满足条件。基本上,只要发射角进入地面,距离值应该为零。

代码的其余部分工作正常,但这部分的所有角度值都在 180 及以上,这意味着所有这些距离都为零。(这没有意义,因为 365 度发射角应该与 5 度发射角相同)。

我做错了什么,还是有其他条件可以用来获得预期的结果?

编辑:叹息....计算没有问题,我只是个白痴。我将角度增量器放在 else 语句中,这意味着对于 if 语句为 true 的第一个角度将用于程序的其余部分。这是我拥有的整个方法代码:

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;    
}
4

1 回答 1

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

如果我了解您的要求,它似乎正在工作。

于 2013-02-09T20:17:43.550 回答