2012-02-07 163 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 */ }