我需要爲範圍值實現switch語句我可以使用if else,但我認爲switch的性能會更好。我需要在java中使用switch語句來獲取範圍值
我有要求,如果變量的值在1-150之間的範圍我會處理我的邏輯。如果變量的值在150-300之間的範圍內,那麼其他一些邏輯,如果範圍在300-450之間,那麼一些不同的邏輯等等。
所以我如何在這種情況下使用開關,因爲通常我使用開關的固定值。 在此先感謝。
我需要爲範圍值實現switch語句我可以使用if else,但我認爲switch的性能會更好。我需要在java中使用switch語句來獲取範圍值
我有要求,如果變量的值在1-150之間的範圍我會處理我的邏輯。如果變量的值在150-300之間的範圍內,那麼其他一些邏輯,如果範圍在300-450之間,那麼一些不同的邏輯等等。
所以我如何在這種情況下使用開關,因爲通常我使用開關的固定值。 在此先感謝。
我建議你使用一個公式
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語句以及條件運算符。
非常新穎的答案 –
@AmberBeriwal歡呼,如果你除以50例如,你可以有不同的大小範圍,沒有太多的複雜性。 –
這是不可能的。
如果您檢查Java Language Specification for switch
,您會發現case
之後的表達式必須是ConstantExpression
或EnumConstantName
。
這些都不是一個範圍。
評論中指出了一些替代方案。您可以使用if
聲明;除非你有大量的案例,否則它不應該在性能上有很大的不同。
或者你可以(根據this answer, linked in the comments by @tomas)創建單獨的函數來區分不同的範圍。
如果範圍是常規的(例如101-200,201-300等),您也可以使用公式。謹防舍入錯誤!測試公式的邊緣情況以確保它是正確的。
告訴我們你先試了一下。 「_I可以使用,但我認爲開關的性能會更好。」不要擔心這種簡單例子的「性能」。首先擔心讓程序運行。 –
您可以執行一些算術將每種情況轉換爲特定的常量。但是,你可能會更好地使用if語句。 'switch'語句不適用於範圍。 – khelwood
應該回答你的問題:http://stackoverflow.com/questions/10873590/in-java-using-switch-statement-with-a-range-of-value-in-each-case – tomas