2013-05-08 61 views
-2

我有下面的代碼:「爲」用Java迴路斷線不工作

private boolean result = false; 
public boolean checkHourExist(int hourfrom, 
           int minutefrom, 
           int hourto, 
           int minuteto, 
           int day, 
           int templateId) 
{ 
    List<templates> t = getAllTemplatesWithDays(); 

    for (templates tem : t) 
    { 
     if(day == -1 | tem.Temp_DayId == day) 
     { 
      if(tem.Temp_HourFrom >= hourfrom & tem.Temp_HourTo == hourto) 
      { 
       if(tem.Temp_HourFrom == hourfrom) 
       { 
        if(tem.Temp_MinFrom == minutefrom) 
        { 
         result= true; 
         break; 
        } 
        else if(minutefrom < tem.Temp_MinFrom & minuteto >= tem.Temp_MinTo) 
        { 
         result = true; 
         break; 
        } 
       } 
       else 
       { 
        result = true; 
        break; 
       } 
      } 
      else if(tem.Temp_HourFrom == hourfrom & tem.Temp_HourTo < hourto) 
      { 
       result = true; 
       break; 
      } 
      else if(tem.Temp_HourFrom > hourfrom & tem.Temp_HourTo < hourto) 
      { 
       result = true; 
       break; 
      } 
     } 
    } 
    return result; 
} 

當代碼去我if S的一個,該循環永遠不會打破,並一直持續到結束,我變量結果不會取真值。我認爲這可能是愚蠢的,但我看不出什麼錯誤。

+0

打破完美。你確定有任何條件正在被打擊 - 那裏沒有最後的決定。 – 2013-05-08 20:33:11

+0

你的意思是'continue'而不是'break'嗎? 「打破並繼續直到完成」表明這一點。 – 2013-05-08 20:33:11

+3

你可以在'break'之前添加一個'println'語句或者調試器斷點來確保它已經到達嗎? – wchargin 2013-05-08 20:34:00

回答

8

您必須在if s中將|&加倍。

||裝置或
&&裝置和

|&是bitewise運算符。

要澄清我的答案,您的break條件對我來說似乎很好,我在代碼中看到的唯一真正的問題是我提到的操作符。

+1

但'''和'&'也可以接受布爾參數。他們也有[低優先級](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html),然後'==','<', '>','<=' or '> ='那麼爲什麼OP將不得不用'||'和'&&'代替? – Pshemo 2013-05-08 20:41:58

+1

@Pshemo是正確的,應用於布爾值的'|'和'&分別表示_or_和_and_。他們不會像他們的同行一樣短路。 – GriffeyDog 2013-05-08 20:46:07

+0

嗯。那就對了。這可能需要一些調試才能更好地理解問題。 – 2013-05-08 21:00:21

2

如何返回而不是打破。從我的角度來看,這使得它更具可讀性

private boolean result = false; 
public boolean checkHourExist(int hourfrom,int minutefrom,int hourto,int minuteto,int day,int templateId) 
{ 

    List<templates> t = getAllTemplatesWithDays(); 

    for (templates tem : t) 
    { 
     if(day == -1 | tem.Temp_DayId == day) 
     { 
      if(tem.Temp_HourFrom >= hourfrom & tem.Temp_HourTo == hourto) 
      { 
       if(tem.Temp_HourFrom == hourfrom) 
       { 
        if(tem.Temp_MinFrom == minutefrom) 
        { 
         return true; 
        } 
        else if(minutefrom < tem.Temp_MinFrom & minuteto >= tem.Temp_MinTo) { 
         return true; 
        } 
       } else 
       { 
        return true; 
       } 
      } 
      else if(tem.Temp_HourFrom == hourfrom & tem.Temp_HourTo < hourto) { 
       return true; 
      } 
      else if(tem.Temp_HourFrom > hourfrom & tem.Temp_HourTo < hourto) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 
+3

好點,但它不回答這個問題。問題在於按位/邏輯的區別。 – wchargin 2013-05-08 20:35:31

+1

我真的很喜歡單點退出。 – 2013-05-08 20:37:13

+0

@WChargin當應用於布爾值時,'|'和'&'與'||'和'&&'的唯一區別在於前者不會短路,後者可以做到。當應用於布爾值時,兩者都是邏輯_or_和_and_運算符。 – GriffeyDog 2013-05-08 20:48:53