我一直在玩一些代码,并注意到如果我有一个if语句两次做同样的事情,我想知道java是否有任何实现与某个动作相反。
if(id == 1) {
partnerID = 3;
} else if(id == 2) {
partnerID = 4;
} else if (id == 3) {
partnerID = 1;
} else {
partnerID = 2;
}
如您所见,如果id为1,则合作伙伴ID为3,反之亦然。
答案 0 :(得分:4)
不,java没有这种"相反的行动"。但你可以做一些简单的数学运算:
if(id == 1 || id == 3){
partnerID = 4 - id;
}else if(id == 2 || id == 4){
partnerID = 6 - id;
}
答案 1 :(得分:1)
您可以使用查找表。
private static final int[] ID_TO_PARTNER_ID = [ 2, 3, 4, 1 ];
static int partnerIdForId(int id) {
return 0 <= id && id < ID_TO_PARTNER_ID.length
? ID_TO_PARTNER_ID[id]
: 2;
}
答案 2 :(得分:0)
使用Java 8和Optional
,您可以以功能方式分配partnerID
。 swap()
操作被封装和参数化,这消除了数值常数1,2,3,4的重复。但问题是返回操作的逻辑和数字输出。我们必须知道条件是否已经满足,我们需要交换的结果。这可以通过返回null
来完成,但是Optional
会变得更优雅。
int partnerID = swap(1, 3, id).map(Optional::of)
.orElse(swap(2, 4, id)).map(Optional::of)
.orElse(Optional.of(defaultPartnerId)).get();
private static Optional<Integer> swap(int a, int b, int x) {
if (x != a && x != b) return Optional.empty();
return Optional.of(a + b - x);
}