0

给出以下参数:

boolean a = true ;
boolean b = false ;
boolean c = true ;

我想要这个版本的最少代码:

if ( ( a && ! b) || ( ! a && b) ) {
    z1 += 99 ;
}

if (a ^ b) {
    z1 += 19 ;
}

if ( ( a && b) || ( ! a && ! b) ) {
    z1 += 118;
}

需要修改什么?

4

3 回答 3

9

第一个条件与第二个相同,第三个是其他的否定,所以我们有

if (a ^ b) {
   z1 += 99 + 19  // = 118
} else {
   z1 += 118
}

我们可以再次缩短它,无论 a 或 b 是什么,z1 都增加了 118,所以我们只有

z1 += 118
于 2010-10-20T09:19:49.210 回答
2

如果您将来需要弄清楚这样的事情,那么您可能想尝试编写一个表格(我认为它被称为真值表,但这里的一些更具数学头脑的人可能会纠正我)显示所有可能的输入及其各自的结果。一旦您编写了表格,您应该能够快速识别整体逻辑并可能简化它。

对于上面的表格,可能看起来像这样;

  a  |  b  |  z1
------------------
  t  |  t  |
  t  |  f  |
  f  |  t  |
  f  |  f  |

Go through each row and write the effects of z1 in the column. This should allow you to easily determine what's going on and how to shorten it, if possible.

于 2010-10-20T09:34:15.730 回答
1
if ( ( a && ! b) || ( ! a && b) ) {
}  

您可以使用

if ( a!=b) {
} 

if ( ( a && b) || ( ! a && ! b) ) {}  

您可以使用

if(a==b){}  

if (a ^ b) {}   

可以代替它

于 2010-10-20T09:18:48.923 回答