最少的代码,缩短表达

时间:2010-10-20 09:14:08

标签: java operators comparator

给出以下参数:

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;
}

需要修改什么?

3 个答案:

答案 0 :(得分:9)

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

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

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

z1 += 118

答案 1 :(得分:2)

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

对于上述内容,表格可能如下所示;

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

遍历每一行并在列中写下z1的效果。如果可能,这应该可以让您轻松确定发生了什么以及如何缩短它。

答案 2 :(得分:1)

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

你可以使用

if ( a!=b) {
} 

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

你可以使用

if(a==b){}  

if (a ^ b) {}   

可以取而代之的