重複的變量中的條件是否有使用或無渣在條件重複變量的方式:使用邏輯或不需要在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