如果第一个是真的,如何避免java将条件计为真,而不进行测试?

时间:2017-11-23 14:30:14

标签: java

该程序在第二行B显示错误结果,如果第一句为真,他认为第二个条件为真而未经测试。 你可以给我提供帮助吗?

int N=10, P=5;
char C='S';
boolean B;

N=5;P=2;
B= (N++>P)||(P++ !=3);
System.out.println("A : N= "+N+" P="+P+" B="+B);

N=5; P=2;
B= (N++ <P)|| (P++ !=3);
System.out.println("B : N= "+N+" P="+P+" B="+B);

N=5; P=2;
B= (++N ==3) && (++P ==3);
System.out.println("C : N= "+N+" P="+P+" B="+B);

N=5; P=2;
B= (++N ==6) && (++P ==3);
System.out.println("D : N= "+N+" P="+P+" B="+B);

N=C;
System.out.println("\nE :C= "+C+" N = "+N);

[在此处输入图像说明] [1]

[1]:https://i.stack.imgur.com/Le5lE.png程序的结果

3 个答案:

答案 0 :(得分:1)

这就是OR的工作方式。只有一个ORed表达式必须为true才能使整个表达式为true,因此测试在第一个表达式处停止以计算为true。如果您希望表达式失败,如果一个子表达式为false,请使用AND(&amp;&amp;)。

答案 1 :(得分:0)

好的,你为什么不用“++ P”而不是“P ++”? 它可以首先将P的当前值(其为2)与数字3进行比较,然后P递增。如果使用“++ P”,您将更改操作的顺序。

答案 2 :(得分:0)

图片中的节目输出是正确的 如果至少有一个句子为真,则逻辑运算符|| “或”返回true,因此如果第一个句子为真,则无需查看下一个句子;事实上,对于第二句可以假设的每个值,句子B= (N++ <P)|| (P++ !=3);都是正确的 可能你的意思是独占或(XOR) ^,只有当一个句子为真且另一个为假时才是真的?