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 に答える