-1

好的,我有这个方法,它的结尾是这样的:

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

奇怪的是,在逐步调试时,我停在return true,在 Eclipse 上按 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

所以,正如你所提到的 - 这是不可能的。我怀疑这与两件事之一有关;(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 回答