2017-08-20 43 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

被异或事实并非如此。