当前位置: 首页 > 知识库问答 >
问题:

Java if语句不能正确比较布尔值

齐鸿光
2023-03-14

我有一个问题,比较布尔值的if语句不起作用。最后一个if语句,其中notifFlag==true,如果我将它放在那里,它就不起作用了。日志显示notifFlag设置为true,但if语句未运行。但是,如果删除notifFlag==true,则if语句将运行。

boolean notifFlag = false;
for (QueryDocumentSnapshot document : task.getResult()) {
    if(postOwner.equals(signedInUsername)) {
        notificationArr.add(document.getData());
    }
    else {
        if (document.getString("ownerId").equals(signedInUsername) && notifFlag == false) {
            time = document.getLong("timestamp").intValue();
            notifFlag = true;
        }
        Log.d("Notifs", "Flag: " + notifFlag);
        if (!document.getString("ownerId").equals(signedInUsername) && document.getLong("timestamp").intValue() > time && notifFlag == true) {
            Log.d("Notifs", "Added");
            notificationArr.add(document.getData());
        }
    }
} 
Log.d("Array", "" + notificationArr);

带有标志得日志:

2021-03-31 09:57:31.749 14553-14553/com.example.test D/Notifs: Flag: false
2021-03-31 09:57:31.749 14553-14553/com.example.test D/Notifs: Flag: true
2021-03-31 09:57:31.749 14553-14553/com.example.test I/chatty: uid=10153(com.example.test) identical 1 line
2021-03-31 09:57:31.749 14553-14553/com.example.test D/Notifs: Flag: true
2021-03-31 09:57:31.749 14553-14553/com.example.test D/Array: []

没有标志得日志

2021-03-31 09:58:49.685 14727-14727/com.example.test D/Notifs: Flag: false
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Added
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Flag: true
2021-03-31 09:58:49.686 14727-14727/com.example.test I/chatty: uid=10153(com.example.test) identical 1 line
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Flag: true
2021-03-31 09:58:49.687 14727-14727/com.example.test D/Array: [{reports=[], text=hi, type=reply, timestamp=1617157454}]

共有1个答案

江英华
2023-03-14

我在日志中找到了您的问题。
比较布尔值没有问题。

我查了你的日志,没有标志。

2021-03-31 09:58:49.685 14727-14727/com.example.test D/Notifs: Flag: false
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Added
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Flag: true
2021-03-31 09:58:49.686 14727-14727/com.example.test I/chatty: uid=10153(com.example.test) identical 1 line
2021-03-31 09:58:49.686 14727-14727/com.example.test D/Notifs: Flag: true
2021-03-31 09:58:49.687 14727-14727/com.example.test D/Array: [{reports=[], text=hi, type=reply, timestamp=1617157454}]

“notifs:added”有一行日志。当notifFlag为false时调用它。

notificationArr.add(document.getData());

它意味着“notificationarr.add(document.getData());”当notifflag为true时,不调用
因此,如果选中notifflag==true“notificationarr.add(Document.GetData());”不该叫。

所以我的回答,你的逻辑是错的。if语句没有错。

请相信Java的语言。

请检查您的代码逻辑。

PS:所以我改了你的代码。

boolean notifFlag = false;
for (QueryDocumentSnapshot document : task.getResult()) {
    if (postOwner.equals(signedInUsername)) {
        notificationArr.add(document.getData());
    } else {
        if (document.getString("ownerId").equals(signedInUsername)) {
            if (!notifFlag) {
                time = document.getLong("timestamp").intValue();
                notifFlag = true;
            } else if (document.getLong("timestamp").intValue() > time) {
                Log.d("Notifs", "Added");
                notificationArr.add(document.getData());
            }

        //} else { // i think this may be removed.
            //if (notifFlag && document.getLong("timestamp").intValue() > time) {
        //}
    }
} 
Log.d("Array", "" + notificationArr);

我希望这对你有帮助。

 类似资料:
  • 问题内容: 我正在做一个简单的游戏,您在屏幕上移动一个球,并尝试避免屏幕上出现其他障碍。 我遇到的问题是,当我尝试评估您是否接触另一个块时,无论我的布尔值等于什么,我的if语句总是返回第一个结果。这是我评估陈述的方法 这是发送 sect 布尔值的代码部分: 这是完整的代码: 请告诉我我在做什么错!!! 谢谢! 问题答案: 你需要 代替 甚至 更好的 办法是使用

  • 为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。

  • 问题内容: 以这个为例(摘自Java regexchecker不起作用): 是否用于检查的值是否重要? 我知道有这是颇为相似。但是,很明显,这个问题只针对原始对象,而不是对象包装器;因此,将不适用。 另外,应该以不同于其他的方式对待? 问题答案: 从您的评论看来,您正在寻找使用包装器类的“最佳实践” 。但是实际上 并没有 最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必

  • 这是我试图实现的:我有ActioBar,我有一个名为登录在ActionBar上的菜单项。当点击这个登录菜单项时,它会在动作栏中添加一个新选项卡,并在父活动的容器中加载带有login_layout的片段。如果我点击任何其他选项卡,登录选项卡就会消失。只有再次点击登录菜单项,它才能重新出现。一旦登录成功,我想将菜单项的标题更改为注销。现在,在将登录菜单项的标题设置为注销后,如果我点击它,它不应该在动作

  • 问题内容: 我在db中有类型的字段。我使用PostgreSQL。和查询 不返回行中的值是。 但是例如查询 正常工作。 如何解决此问题并获取行? 问题答案: 要 解决 您的问题,请改用数据类型 ,该数据类型不是浮点类型,而是任意精度类型。 如果将数字文字 输入到(相同的单词,不同的含义)列中,则会存储 确切的 数量- 与a或column列不同,在该列中,值被强制为下一个可能的二进制近似值。这可能是正

  • 问题内容: 我在mysql db表中有一个布尔字段。 要获得所有未过时的测试用例的计数,可以像这样简单地完成: 效果很好,但是flake8报告以下警告: E712:与False的比较应为“如果cond为False:”或“如果非cond:” 好吧,我认为这是有道理的。因此,将我的代码更改为此: 要么 但是它们都不起作用。结果始终为0。我认为filter子句不支持运算符“ is”或“ is not”。