我已经编码数十年了,并且使用了许多不同的语言。目前,我正在为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()。
这是我做错的事情,但是对于我一生来说,我看不到它。帮我发现我的愚蠢吧!
谢谢。
答案 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系统?您可能希望编译器会引起问题,但是(在我看来)这是这里的问题。