【问题标题】:Unexpected jump from IF to ELSE after "RETURN"command in IF sentemceIF 语句中的“RETURN”命令后意外从 IF 跳转到 ELSE
【发布时间】:2023-04-22 05:25:01
【问题描述】:

我正在使用 Android,我遇到了有史以来最奇怪的错误之一。 此函数检查我是否可以为 Paint 对象设置更大的字体。

我在这里看到的是,即使第一个 if 语句是 TRUE ......并且下一个也是 true,在返回值“true”之后......它会跳转到最后一个“return false; "这是绝对不可能的!

你们中有人知道为什么会发生这种情况吗?谢谢 !!!

private boolean fontCanBeBigger(String text, Paint paint, Canvas canvas, int divisor){      
    if (textFitsOneLine(text, paint, canvas))
    {           
        paint.setTextSize(divisor-2);           
        if (textFitsOneLine(text, paint, canvas) && (divisor > MIN_DIVISOR))                                
        {
                paint.setTextSize(divisor+2); 
                return true;
        }
        else
        {
            paint.setTextSize(divisor+2); //set it back to previous value
            return false;
        }           
    }
    else { return false; }  
}

private boolean textFitsOneLine(String text, Paint paint, Canvas canvas)
{
    int length = paint.breakText(text, true,(float) canvas.getWidth()- MARGIN, null);       
    return length >= text.length();
}

【问题讨论】:

  • Do any of you have any idea why this could be happening? 不是没有看到textFitsOneLine()的代码
  • 这里有:private boolean textFitsOneLine(String text, Paint paint, Canvas canvas){ int length=paint.breakText(text, true,(float) canvas.getWidth()- MARGIN, null); return length >= text.length(); }
  • 您认为您如何观察到它返回了true,然后返回了false?我认为更有可能的是,也许你调用了 1`fontCanBeBigger` 两次,它返回 true 然后返回 false。 (也许它曾经返回 true,paint 变大,所以下一次 textFitsOneLine 是 false)
  • 启动应用程序时,我看到结果为假...所以我调试应用程序,调试时我看到它进入 if 语句,进入下一个,返回 true ,然后它直接返回 false,这就是我得到的。

标签: android if-statement return


【解决方案1】:

这可能是调试器的UI故障,但实际上只执行了if语句的单个执行路径

【讨论】: