Java / Android Studio / If语句尽管符合条件仍未执行

时间:2019-10-20 10:47:59

标签: java if-statement boolean

我已经编码数十年了,并且使用了许多不同的语言。目前,我正在为Uni课程编写一个简单的Java应用程序。该课程很容易,但是我遇到了一个if语句的问题,该if语句即使满足条件也根本不希望执行。

我要坦率地问这样一个简单的问题,但这是我花了更多时间认真解决的问题。

请允许我详细说明:

我有两个变量,一个是局部变量,一个是生成变量,都定义为 int _selectedImage clickedImageID ,都提供给 public void 函数,用于检查它们是否相同。第一次运行该应用程序时,它们将是相同的,而每隔两次运行该功能时,它们将是相同的。

但是,无论我做什么,它都根本不想执行if块。让我演示一下:

private int _selectedImage;

public void setPuzzlePiece(int clickedImageID) {
 // selectedImage == clickedImageID on first run.
 Boolean firstRun = (clickedImageID == _selectedImage);
 if (firstRun==false) {
  // do stuff
  String debugPoint = "adding this here just to attach a debug point";
 }
}

我提供了调试过程中的屏幕截图,突出显示了这些值:

https://i.imgur.com/ahgNZLP.png

对于 clickedImageID ,您将看到 int 4 5 的相关值> _selectedImage ,而 firstRun false

发现尽管满足条件,调试器如何认为在第77行没有找到可执行代码,并且逐步调试它只是“忽略” if条件。但是我们都可以看到逻辑,很明显它应该执行该块。

最初,我将其作为一个简单的比较。 if (_selectedImage==clickedImageID) { .. }但已将条件转换为布尔值并对此进行了比较。我还尝试了多种检测伪造的方法,例如(firstRun==false)(!firstRun)(firstRun==(!true)),以及许多其他愚蠢的方法,但是它非常简单,只需将布尔值与任一正确或错误就足够了。

如果我使用评估窗口,它将返回屏幕截图显示的内容,即满足if块条件,但仍不会执行。

这可能与Java及其比较有关。当我使用多种语言时,有时我会被每种语言的缺点所吸引。例如在C#中,您可以通过==比较字符串,而在Java中,您可以使用equals()。

这是我做错的事情,但是对于我一生来说,我看不到它。帮我发现我的愚蠢吧!

  • ps:我检查了这是否是一个重复的问题,虽然有几个线程与类似的线程相关,但它们使用的是PHP或C ++,而不是Java,在Java中,这是一个简单的语法错误,使它们失败。从我所见,这不是这里的问题。 *

谢谢。

4 个答案:

答案 0 :(得分:0)

您能否分享有关该问题的更多详细信息,或者将整个代码粘贴在“问题”部分的此处。


我用了几乎相同的代码,对我来说很好用。

class Test{
    private static int _selectedImage;

    public static void setPuzzlePiece(int clickedImageID) {
        Boolean firstRun = (clickedImageID == _selectedImage);
        if (firstRun == false) {
            String debugPoint = "adding this here just to attach a debug point";
            System.out.println(debugPoint);
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        _selectedImage = 10;
        setPuzzlePiece(11);
    }
}

输出-在此处添加此内容只是为了附加调试点

尝试重新启动IDE或使缓存无效。

答案 1 :(得分:0)

它可以在我的机器上运行...当我运行此代码时,它会到达打印语句。

 public static void main(String[] args) {
    setPuzzlePiece(3);

}

private static int _selectedImage = 1;

public static void setPuzzlePiece(int clickedImageID) {
    // selectedImage == clickedImageID on first run.
    Boolean firstRun = (clickedImageID == _selectedImage);
    if (firstRun == false) {
        // do stuff
        System.out.println("adding this here just to attach a debug point");
    }
}

答案 2 :(得分:0)

尝试使用firstRun.toString()打印firstRun的值;在if语句之外。 以及使用toString()方法的clickedImageID和_selectedImage的值。

答案 3 :(得分:0)

所以说实话,我真的不明白发生了什么,我已经为此重写了函数(保持相同的名称和参数)。

    public void setPuzzlePiece(int clickedImageID) {
            boolean areEqual = (clickedImageID == _selectedImage);
            if (!areEqual) {
                System.out.print("they are equal");
            }
    }

..以及lo和belook,现在它在!areEqual时执行if块。如果有人愿意指出上面的代码为何起作用,而我在OP中发布的代码却不起作用,那么我将不胜感激,因为我希望不再遇到这个问题。

我应该指出,除了在IDE中我什么都没做之外,删除函数内容(保留定义)并用areEqual代替firstRun。

firstRun 是否以某种方式原生于Android系统?您可能希望编译器会引起问题,但是(在我看来)这是这里的问题。