大神求解:如何证明条件运算符(?:)的结合性是从右向左?请举例说明。
2条回答 默认 最新
- threenewbee 2018-10-28 07:55关注
class Untitled { public static void main(String[] args) { Boolean b1 = false; Boolean b2 = false; Boolean b3 = false; Boolean b4 = false; Boolean b5 = false; for (int i = 0; i <= 31; i++) { b1 = i % 2 == 1; b2 = (i / 2) % 2 == 1; b3 = (i / 4) % 2 == 1; b4 = (i / 8) % 2 == 1; b5 = (i / 16) % 2 == 1; Boolean x = (b1 ? b2 : b3) ? b4 : b5; Boolean y = b1 ? b2 : (b3 ? b4 : b5); Boolean z = b1 ? b2 : b3 ? b4 : b5; if (x != y || y != z || x != z) { System.out.println("x = (" + b1 + " ? " + b2 + " : " + b3 + ") ? " + b4 + " : " + b5); System.out.println("y = " + b1 + " ? " + b2 + " : (" + b3 + " ? " + b4 + " : " + b5 + ")"); System.out.println("z = " + b1 + " ? " + b2 + " : " + b3 + " ? " + b4 + " : " + b5 + ""); System.out.println("x = " + x + ", y = " + y + ", z = " + z); System.out.println(""); } } } }
x = (true ? true : false) ? false : false
y = true ? true : (false ? false : false)
z = true ? true : false ? false : false
x = false, y = true, z = truex = (true ? true : true) ? false : false
y = true ? true : (true ? false : false)
z = true ? true : true ? false : false
x = false, y = true, z = truex = (true ? false : false) ? false : true
y = true ? false : (false ? false : true)
z = true ? false : false ? false : true
x = true, y = false, z = falsex = (true ? true : false) ? false : true
y = true ? true : (false ? false : true)
z = true ? true : false ? false : true
x = false, y = true, z = true
x = (true ? false : true) ? false : true
y = true ? false : (true ? false : true)
z = true ? false : true ? false : true
x = true, y = false, z = falsex = (true ? true : true) ? false : true
y = true ? true : (true ? false : true)
z = true ? true : true ? false : true
x = false, y = true, z = truex = (true ? false : false) ? true : true
y = true ? false : (false ? true : true)
z = true ? false : false ? true : true
x = true, y = false, z = falsex = (true ? false : true) ? true : true
y = true ? false : (true ? true : true)
z = true ? false : true ? true : true
x = true, y = false, z = falsey始终等于z,说明
b1 ? b2 : (b3 ? b4 : b5);
b1 ? b2 : b3 ? b4 : b5;
等价
(b1 ? b2 : b3) ? b4 : b5;
b1 ? b2 : b3 ? b4 : b5;
不等价所以得证
如果问题得到解决,请点下我回答右边的采纳,谢谢
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报