重复的变量中的条件是否有使用或无渣在条件重复变量的方式:使用逻辑或不需要在Java
例如
if(x != 5 || x != 10 || x != 15)
,而不是使用像
if x not in [5,10,15]
重复的变量中的条件是否有使用或无渣在条件重复变量的方式:使用逻辑或不需要在Java
例如
if(x != 5 || x != 10 || x != 15)
,而不是使用像
if x not in [5,10,15]
如果你想要的是,如果x不是{5,10,15}中的任何一个,则返回true,然后通过创建一个集合(set或list,无关紧要)并使用contains方法来实现。
替代用于初始化集合包括使用Arrays.asList
:
if (!Arrays.asList(5, 10, 15).contains(x)) {
或使用番石榴(从com.google.common.collect
)
if (!Sets.newHashSet(5, 10, 15).contains(x)) {
请注意,您的第一个表达式(x != 5 || x != 10 || x != 15)
没有做到像“X不是什么[5,10,15]“,如果你认为它确实存在,那么你就会误解布尔逻辑。如果将10传递到表达式中,则一旦子表达式评估为真,则评估短路10,则不等于5,因此x != 5
评估为真,并且OR停止评估,因为它已经被发现是真的,所以没有理由继续进行。你想要的是
(x != 5 && x != 10 %% x != 15)
或等价
(!(x == 5 || x == 10 || x == 15))
您可以利用短路终端操作的Java8流(见Stream Operations section in the Stream Package Description了解详情。)例如:
int x = 2;
// OR operator
boolean bool1 = Stream.of(5, 10, 15).anyMatch(i -> i == x);
System.out.println("Bool1: " +bool1);
// AND operator
boolean bool2 = Stream.of(5, 10, 15).allMatch(i -> i != x);
System.out.println("Bool2: " +bool2);
它产生以下输出:
Bool1: false
Bool2: true
这里自带的不是用流或一个HashMap的那些性能开销少得多的解决方案:
要在数组核对,写一个小功能检查x
是否是其中
存储值这些值
private static boolean isNotIn(int x, int[] values) {
for (int i : values) {
if (i == x) {
return false;
}
}
return true;
}
if (isNotIn(x, new int[] {5, 10, 15})) {
...
}
相比原代码的开销是最小的,可忽略不计,如果你能拉出阵列为常数。 我还发现这是更好的比其他的解决方案,以阅读,但认为是一个非常主观的意见;-)
有没有“不”构建在Java中,我知道的。如果你有很多的比较做出,只是把可能的值在http://docs.oracle.com/javase/7/docs/api/java/util/Set.html – seand
或List https://开头因为'x'总是以不同的一个docs.oracle.com/javase/7/docs/api/java/util/List.html#contains(java.lang.Object) –
第一次检查将总是返回TRUE;价值。 – fabian