-1

さて、私はこのように終わるこのメソッドを持っています:

if(totalDeg > mStartAngle && totalDeg < mSweepAngle){
            return true;
        }
        else {
            return false;
        }

奇妙なことは、ステップバイステップでデバッグするときに、return trueEclipse で F6 (または F5) を押して、次の命令がreturn false!!!であるということです。

これはどのように可能ですか?

PD。これは私がこの関数を呼び出す場所です:

if(d.isInArea(x, y)){
            //d.onTap();
            Toast.makeText(mContext, "Directory " + d.getName() + " was tapped!", Toast.LENGTH_SHORT).show();
}

これは isInArea メソッドです。

public boolean isInArea(float x, float y){
        int deltaX = (int) (x - mRectShape.centerX());
        int deltaY = (int) (y - mRectShape.centerY());

        if (Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)) > mRectShape.width()/2) {
            return false;
        }

        double offset = 0;

        //now calculate angle
        double angle = Math.atan2(deltaY, deltaX);
        double total = angle;
        double totalDeg = Math.toDegrees(total);
        Log.d(LOG_TAG, "angle :" + totalDeg);

        if(totalDeg > mStartAngle && totalDeg < mSweepAngle){
            return true;
        }
        else {
            return false;
        }
    }
4

1 に答える 1

0

だから、あなたがほのめかしたように、これは不可能です。これは、次の 2 つのいずれかに関係していると思われます。(1) IDE で実行されているように見えるコードは、実行されている実際のコードではありません。つまり、プロジェクトのビルド後に生成された dex ファイルが src と同期していない、または (2)ステートメントは何かを混乱させました - それは私を混乱させるでしょう! そのように if ステートメントを書きます。

boolean withinAcceptedAngle;
if(totalDeg > mStartAngle && totalDeg < mSweepAngle) { 
  withinAcceptedAngle = true; 
}
return withinAcceptedAngle;

...その後、Project CleanProject Buildを実行し、リターン時にブレークポイントで再実行します。booleanプリミティブ型は に初期化されるfalseため、そのように宣言する必要がないことに注意してください。とはいえ、不一致の理由を見つけたら、次のように記述してコードを短くすることができます。

return totalDeg > mStartAngle && totalDeg < mSweepAngle;

この場合の短縮は、より文体的なものだと思います。一般的に、私は省略形のアプローチを好みます。

于 2013-03-05T14:14:18.913 に答える