2017-08-20 73 views
-1

所以,我必須代表例如num1 = <-1,4,5>將是整數的ArrayList -145和num2= <2,3,6>將代表236訂單Java表達式的評價

ArrayList<Integer> num1 = new ArrayList<>(Arrays.asList(1,2,9)); 
ArrayList<Integer> num2 = new ArrayList<>(Arrays.asList(-5,5)); 
final int sign = num1.get(0) < 0^num2.get(0) < 0 ? -1 : 1; 

所以標誌是應該確定將繁殖的發生符號num1與num2(-145*236將是一個負數)。所以比較運營商非關聯所以這應該是一個等價的表達式:

sign = (num1.get(0) < 0^num2.get(0)) && (0^num2.get(0) < 0) ? -1:1; 

請告訴我困惑我是爲什麼num2.get(0) 0被異或運算,因爲這並不改變num2.get(0)可言。

也可以說num2.get(0) = -2num1.get(0) = -3那麼如果我們評估符號,我們會得到符號= -1。因爲(-3< 0^-2) AND (0^-2 < 0)? -1:1;評估爲-1。

但是這將是錯誤的-3 * -2應該是一個正數。所以我錯過了什麼,因爲我知道這段代碼是正確的(它來自教科書)。

+4

這是不正確的java'AND'不是java。 '0^num2.get(0)<0'是無稽之談。 '<'比'^'綁定更緊密,所以這是''用'boolean'對'int'進行操作。你也是對的,用零來形成一個'int'什麼也不做。相信我。教科書中有很多錯誤。 – Gene

+0

如果你想要的只是符號,你可能會考慮'Integer.signum(num1.get(0)* num2.get(0))'。 – markspace

+0

這兩個不相同。 – EJ2015

回答

4
num1.get(0) < 0^num2.get(0) < 0 ? -1 : 1 

被評價爲

((num1.get(0) < 0)^(num2.get(0) < 0)) ? -1 : 1 

這是通過操作者的優先級來確定。無關聯的比較運算符與它無關。

請告訴我困惑我是爲什麼num2.get(0)0

被異或事實並非如此。