2014-04-10 112 views
0

新手在這裏,我正在寫一個方法來比較兩個存儲時間的對象。這是寫這種方法最有效的方法嗎?

我寫了這個:

public boolean isBefore(TimeType secondTime) 
{ 
    if (_hour < secondTime._hour) 
    { 
     return true; 
    } 
    else 
    { 
     if (_hour == secondTime._hour && _minute < secondTime._minute) 
     { 
      return true; 
     } 
     else 
     { 
      if (_hour==secondTime._hour && _minute == secondTime._minute 
       && _second < secondTime._second) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

我覺得檢查_hour == secondTime._hour兩次是有點多餘,但沒有它的塊不起作用。因爲這是一個三路邏輯樹(大/小/等於),我在這個問題上找不到任何真正的幫助,所以我希望能夠從你們那裏得到一些幫助。

謝謝!

+0

[設置返回值的最佳做法(使用else或?)](http://programmers.stackexchange.com/questions/87965/best-practice-in-setting-return-value-use-else - 或) – gnat

+0

另一個可能的重複:[帶有驗證檢查的控制流的樣式](http://programmers.stackexchange.com/questions/148849/style-for-control-flow-with-validation-checks) – gnat

+1

boolean isBefore = hour.toMillis() ElDuderino

回答

4

如果速度是最關心的問題,請將TimeType int作爲一個單一的整數來計數從定義的時間(例如,當天開始)。兩個TimeType對象之間的比較將成爲單個整數比較。否則,看起來你正在優化不需要優化的代碼。

0

我會建議以刪除冗餘小時測試:

public boolean isBefore(TimeType secondTime) 
{ 
    if (_hour < secondTime._hour) 
    { 
     return true; 
    } 
    else if (_hour == secondTime._hour) 
    { 
     if (_minute < secondTime._minute) 
     { 
      return true; 
     } 
     else 
     { 
      if (_minute == secondTime._minute 
       && _second < secondTime._second) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
0

添加嵌套的另一層if小號

public boolean isBefore(TimeType secondTime) 
{ 
    if (_hour < secondTime._hour) 
    { 
     return true; 
    } 
    else if (_hour == secondTime._hour) 
    { 
     if(_minute < secondTime._minute) 
     { 
      return true; 
     } 
     else if (_minute == secondTime._minute) 
     { 
      if(_second < secondTime._second) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

如果你不喜歡嵌套,那麼你可以交替檢查:

public boolean isBefore(TimeType secondTime) 
{ 
    if (_hour < secondTime._hour) 
    { 
     return true; 
    } 
    if (_hour > secondTime._hour) 
    { 
     return false; 
    } 
    //here _hour == secondTime._hour 
    if (_minute < secondTime._minute) 
    { 
     return true; 
    } 
    if (_minute > secondTime._minute) 
    { 
     return false; 
    } 
    //here _minute == secondTime._minute 
    if (_second < secondTime._second) 
    { 
     return true; 
    } 
    if (_second > secondTime._second) 
    { 
     return false; 
    } 
    return false; 
} 
1

我對TimeType並不熟悉(Google也找不到它),但我的建議是將TimeTypes轉換(如果可能)爲毫秒並比較它們。

這將消除嵌套的if/else語句的需要。

因此,這將成爲類似:

public boolean isBefore(TimeType secondTime) {  
    if(firstTime.toMilis() < secondTime.toMilis()) { 
     return true; 
    } 
    return false; 
} 

如果TimeType(再次,我無法找到它的API)不具有其自己的方法轉換到毫秒,使得靜態方法做這個也不是很難。