应该很容易。我有3个复选框,并且有许多条件语句应根据输入的复选框执行。在这种情况下,我所有3“检查”....所以这些陈述都不应该运行。看起来我把它们格式化了错误。让我知道我做错了什么... thanx
记录器:
// form.isOpenLevel() = true
// form.isPhyCompLevel() = true
// form.isFinCompLevel() = true
如果3个中的2个为真,则只应执行这三个语句。至少那就是我想要做的事情。
if ((form.isOpenLevel() == true && form.isPhyCompLevel() == true) && (form.isFinCompLevel() != true));
{
paramBean.addFilter(new DetFilterCriteriaBean("MSST_HEADER_DATA_MV.FIN_COMP_DATE","is","NULL"));
}
if ((form.isPhyCompLevel() == true && form.isFinCompLevel() == true) && (form.isOpenLevel() != true));
{
paramBean.addFilter(new DetFilterCriteriaBean("MSST_HEADER_DATA_MV.PHYS_COMP_DATE","is","NOT NULL"));
}
if ((form.isOpenLevel() == true && form.isFinCompLevel() == true) && (form.isPhyCompLevel() != true));
{
paramBean.addFilter(new DetFilterCriteriaBean("nvl2(MSST_HEADER_DATA_MV.PHYS_COMP_DATE,MSST_HEADER_DATA_MV.FIN_COMP_DATE,'X')","is","NOT NULL"));
}
答案 0 :(得分:3)
摆脱IF线上的分号。
分号基本上是对Java说“DO NOTHING”。请注意这些是等效的:
if (complex-logic) ;
if (complex-logic) { /* DO NOTHING */ }
答案 1 :(得分:2)
首先,额外的限制是多余的:
((a && b) && c)
相当于
(a && b && c)
另外 - “这三个陈述只应在3个中的2个为真时才执行”意味着
if ( b && c )
应该足够了。
最后,if
之后的分号结束了条件:
if ( b && c );
statement;
相当于
if ( b && c )
{
}
statement
这就是你的陈述总是在执行的原因。
在条件之后删除;
。
答案 2 :(得分:2)
删除if语句末尾的分号。这先发制人地将其关闭。
换句话说,这个:
if (a); {
//do something
}
相当于:
if (a) {
}
{
//do something
}
在这种情况下,//do something
成为一个始终运行的浮动块,而if语句的条件部分没有要运行的代码。
答案 3 :(得分:1)
您的if
语句末尾有分号;删除它们。你正在那里结束条件权 - 花括号中的块正在在条件下执行。
此外,您不需要检查是否相等;您的方法返回boolean
值,您可以直接评估这些值:
if ( form.isOpenLevel() && form.isPhyCompLevel() && !form.isFinCompLevel() )
{
...
}