我想知道是否可以像这样重写if
int var = 0;
if ( var == 1 || var == 2 )
{
//...
}
在像这样的事情中
int var = 0;
if ( var == (1 || 2) )
{
//...
}
或类似的。感谢
答案 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)
条件运算符或运算符的每个操作数必须是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));
}
}