如果条件语句格式错误?

时间:2012-02-07 18:58:31

标签: java

应该很容易。我有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"));

        }

4 个答案:

答案 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() )
{
    ...
}