2016-10-10 24 views
-4

我需要爲範圍值實現switch語句我可以使用if else,但我認爲switch的性能會更好。我需要在java中使用switch語句來獲取範圍值

我有要求,如果變量的值在1-150之間的範圍我會處理我的邏輯。如果變量的值在150-300之間的範圍內,那麼其他一些邏輯,如果範圍在300-450之間,那麼一些不同的邏輯等等。

所以我如何在這種情況下使用開關,因爲通常我使用開關的固定值。 在此先感謝。

+2

告訴我們你先試了一下。 「_I可以使用,但我認爲開關的性能會更好。」不要擔心這種簡單例子的「性能」。首先擔心讓程序運行。 –

+3

您可以執行一些算術將每種情況轉換爲特定的常量。但是,你可能會更好地使用if語句。 'switch'語句不適用於範圍。 – khelwood

+8

應該回答你的問題:http://stackoverflow.com/questions/10873590/in-java-using-switch-statement-with-a-range-of-value-in-each-case – tomas

回答

8

我建議你使用一個公式

switch (value/150) { 
    case 0: // 0 - 149 
      break; 
    case 1: // 150 - 299 
      break; 
    case 2: // 300 - 449 
      break; 
    default: // otherwise. 
} 

如果使用(value-1)/150你1-150,151-300,301-450等

編輯:0的情況下也將接受-148 - 0由於整數除法的性質,在開關((值-1)/ 150){...}中。爲避免這種情況,可以使用if/else語句以及條件運算符。

+1

非常新穎的答案 –

+2

@AmberBeriwal歡呼,如果你除以50例如,你可以有不同的大小範圍,沒有太多的複雜性。 –

0

這是不可能的。

如果您檢查Java Language Specification for switch,您會發現case之後的表達式必須是ConstantExpressionEnumConstantName
這些都不是一個範圍。

評論中指出了一些替代方案。您可以使用if聲明;除非你有大量的案例,否則它不應該在性能上有很大的不同。
或者你可以(根據this answer, linked in the comments by @tomas)創建單獨的函數來區分不同的範圍。

如果範圍是常規的(例如101-200,201-300等),您也可以使用公式。謹防舍入錯誤!測試公式的邊緣情況以確保它是正確的。