2014-09-05 35 views
1

我想知道,如果是不可能性重新寫一個if這樣在出頭IF條件與OR值

int var = 0; 
if (var == 1 || var == 2) 
{ 
    //... 
} 

這樣

int var = 0; 
if (var == (1 || 2)) 
{ 
    //... 
} 

或相似。謝謝

+5

你可以只對布爾值 – sidgate 2014-09-05 13:26:14

+3

的條件運算符用C條件一樣(1 || 2)總是爲真 – bartl 2014-09-05 13:27:29

回答

1

按照Java Language Specification

條件-或操作中的每個操作數必須是布爾類型或布爾值,或編譯時發生錯誤。

所以沒有,沒有更好(也更快)的方式來編碼您的條件。 (相同的規則適用於條件和運算符)

1

在java中沒有這樣的語法if

如果你在if條件的大組值,你可以使用switch代替:

int var = ...; 
switch(var) { 
    case 1: 
    case 2: 
     // ... 
     break; 
    default: 
     //else case 
     break; 
} 

編輯:

與Java 8,你也可以寫:

int var = ...; 
if (IntStream.of(1, 2, 3, 4).anyMatch(i -> var == i)) { 
    //... 
} 
3

||代表或運營商,所以它需要在它的兩邊都有條件,所以這是不正確的 ,因爲你在||的兩邊都加整數。操作者

0

不,這在Java中是不可能的。你所要求的是類似於sql IN操作符。

if(var == (1 || 2))可以很容易地被翻譯成if(var IN [1,2]),但Java並不支持。

由於靠近你可以得到是使用一個集合:

if(Arrays.asList(1,2).contains(var)){

或String

if("1_OR_2".contains(String.valueOf(var))

另外一個辦法可以建立像

功能
public static final boolean in(final int var, final int... vals) { 
    for (int val : vals) { 
     if (var == val) { 
      return true; 
     } 
    } 
    return false; 
} 

然後,你會打電話給:if(in(var,1,2)){

或者你可以構建一個包裝爲Integer,並添加in方法存在,因此該方法調用可能聽起來更自然(if value x in [val1,val2 ... valN]

public final class Int { 
    private final Integer val; 

    public Int(final int val) {// avoid passing nulls 
     this.val = val; 
    } 


    public boolean in(final int... vals) { 
     for (int val : vals) { 
      if (this.val.equals(val)) { 
       return true; 
      } 
     } 
     return false; 
    } 


    public static void main(final String[] args) { 
     System.out.println(new Int(1).in(1, 2, 3)); 
    } 
} 
+0

'Arrays.asList(new int [] {1,2})'將返回一個'List '。你必須編寫'數組。asList(1,2)'獲得'List '。 – Benjamin 2014-09-05 13:40:50