具有OR值的IF条件

时间:2014-09-05 13:23:39

标签: java objective-c

我想知道是否可以像这样重写if

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

在像这样的事情中

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

或类似的。感谢

4 个答案:

答案 0 :(得分:3)

||代表或操作员所以它需要两侧的条件,所以这是不正确的 因为你在||的两边都放了整数操作

答案 1 :(得分: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)) {
   //...
}

答案 2 :(得分:1)

根据Java Language Specification

  

条件运算符或运算符的每个操作数必须是boolean或Boolean类型,否则会发生编译时错误。

所以不,没有更好(更快)的方式来编码你的病情。 (相同的规则适用于条件和运算符)

答案 3 :(得分:0)

不,这在Java中是不可能的。你问的是与sql IN运算符类似的东西。

if(var == (1 || 2))可以很容易地翻译成if(var IN [1,2]),但Java也不会支持它。

尽可能接近使用集合:

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

或字符串

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));
    }
}