java是一个“如果”条件,它的结果是假的,但我的程序正在通过这个“如果”条件,不管怎样???(对还是错)
在我的JAVA程序中,我有一个“如果”条件:
if( (!pccoNettNoAff && !transOPCVM && !garantie)
&& ( (pccoCourant == null)
|| ( (pccoCourant != null && rBale.getPcco() != null)
&& ( (pccoCourant.getId() != rBale.getPcco().getId())
|| ( pccoCourant.getId() == rBale.getPcco().getId()
&& tauxCourant!=null && rBale.getTauxCcf()!=null
&& rBale.getPartenaire()==null
&& rBale.getTauxCcf()!=tauxCourant
)
)
)
)
)
{
我们可以通过以下方式在逻辑上解释这一点:
图例:T=true和F=False:它们是每次测试的结果
((T)和((F)或((T)和((F)或(F‘‘)’))
因此,我的最终结果显然是错误的(Eclipse调试模式发现相同的结果)
但我的程序无论如何都要通过这个“如果”
我真的不知道为什么会发生这种情况,也许在“如果”条件下有某种限制
如果有人有任何想法,请帮助我:)
问候,
西特马克斯
# 1 楼答案
我同意其他人的观点,但除此之外,你只是没有以一种易读的方式来构建逻辑。下面是我对这个长谓词条件的尝试和理解:
# 2 楼答案
我知道为什么会发生这种情况,因为这对于串联条件来说太复杂了
将代码重构成一个方法(或者可能是多个),这样您就可以将内容放在多行上,添加临时变量等等,这样就可以更清楚地知道意味着什么要做,以及为什么它不做。如下所示:
请放心,Java的
if
语句工作正常# 3 楼答案
已更新
好吧,我在这一点上完全错了--漏掉了一些括号
不管怎么说,我觉得伯特·F有点
您正在检查事物(pccoCourant和rBale.getTauxCcf())是否不为null,这意味着它们是对象引用
然后检查它们是否相同(使用==)
您可能需要检查它们是否相等:
您可以忽略以下内容:
除了其他人提到的复杂性之外,您在以后的情况中还有一些模糊:
最内部的嵌套条件将OR与AND集中在同一级别。 我猜你想要的是:
# 4 楼答案
一个想法是:不要在一个语句中包含这么多荒谬的条件
如果不加以简化,你几乎没有机会弄清楚这里发生了什么。将子表达式提取到单独的局部变量中,然后使
if
条件仅合并这些局部变量这样你就有了一个更好的机会去了解到底发生了什么。很可能您在某个地方误解了调试器
# 5 楼答案
这不是对你问题的直接回答,但我会附和其他人的看法。首先,简化你的条件逻辑;可能通过布尔algreba规则减少(如果分支太复杂)
让我想起了学校里的卡诺地图
我喜欢为每个单独的、较小的条件定义局部变量,这样我就可以将它们组合成一个If语句。每个布尔值 可以调用单独的函数以提高易读性
# 6 楼答案
如果
.getId()
返回一个字符串,那么==
和!=
可能不会按您所想的方式工作-它将测试它们是否是相同的实例,而不是它们是否是相等的字符串。查看字符串。等于()