2012-02-07 118 views
1

应该是一个简单的。我有3个复选框,并且有许多条件语句应该根据输入的复选框来执行。在这种情况下,我所有的3“检查”....所以这些陈述都不应该运行。这看起来像我格式化他们错了。让我知道我做错了什么......感谢名单如果条件语句格式错误?

记录:如果2出3个是真正的

// form.isOpenLevel() = true 
    // form.isPhyCompLevel() = true 
    // form.isFinCompLevel() = true 

这三个声明应该只执行。至少这就是我想要做的。

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")); 

     } 
+3

后删除分号如果()' – Vladimir 2012-02-07 19:00:54

+0

尝试删除'',''后if',它帮助。 – alf 2012-02-07 19:01:36

+0

感谢大家的快速作出回应......我不敢相信我没有注意到这 – 2012-02-07 19:03:49

回答

2

首先,额外的paranthesis是多余的:

((a && b) && c) 

相当于

(a && b && c) 

而且 - “这三个声明应该仅在2个出了3个是真正的执行“表示

if (b && c) 

应该够了。

最后,if后的分号结束是有条件的:

if (b && c); 
    statement; 

相当于

if (b && c) 
{ 
} 
statement 

这就是为什么你总是陈述EXECUT。

删除条件后的;

+0

感谢信息的人...由于某种原因,我没有注意到分号 – 2012-02-07 19:04:10

+0

@DocHoliday乐意帮忙。你也应该考虑到票据的其余部分。 '((A && B)&& C'可能让其他程序员审批代码的傻笑,并在从句中的额外条件可能会降低性能。 – 2012-02-07 19:06:09

+0

林使他们现在改变了....感谢 – 2012-02-07 19:06:19

2

摆脱if语句结尾处的分号。这先发制人地关闭它。

换句话说,这样的:

if (a); { 
    //do something 
} 

是相同的:

if (a) { 
} 

{ 
    //do something 
} 

在这种情况下,//do something变成一个浮动块,是始终运行,和你的if语句的条件部分没有代码可以运行。

+0

非常感谢马克...我看到正是你的意思 – 2012-02-07 19:04:38

1

在您的if语句末尾有分号;删除它们。你在那里结束有条件的 - 大括号中的块被执行外部条件。

此外,您不需要检查是否相等;你的方法返回boolean值,你可以直接评价:

if (form.isOpenLevel() && form.isPhyCompLevel() && !form.isFinCompLevel()) 
{ 
    ... 
} 
+0

谢谢主席先生你的回应 – 2012-02-07 19:05:41

3

摆脱对IF行分号。

分号基本上是对Java说“不做”。请注意,这些是等价的:

if (complex-logic) ; 

if (complex-logic) { /* DO NOTHING */ }