java中的对比if语句
我一直在玩一些代码,并注意到,如果我有一个if语句,它可以两次执行相同的操作,我想知道java是否有任何实现可以执行与某个操作相反的操作java中的对比if语句,java,Java,我一直在玩一些代码,并注意到,如果我有一个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,反之亦然。您可以使用查找表 priv
if(id == 1) {
partnerID = 3;
} else if(id == 2) {
partnerID = 4;
} else if (id == 3) {
partnerID = 1;
} else {
partnerID = 2;
}
如您所见,如果id为1,则合作伙伴id为3,反之亦然。您可以使用查找表
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;
}
private static final int[]ID_TO_PARTNER_ID=[2,3,4,1];
静态int partnerIdForId(int id){
返回0您可以使用查找表
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;
}
private static final int[]ID_TO_PARTNER_ID=[2,3,4,1];
静态int partnerIdForId(int id){
返回0否,java没有这种“相反的操作”。但您可以做一些简单的计算:
if(id == 1 || id == 3){
partnerID = 4 - id;
}else if(id == 2 || id == 4){
partnerID = 6 - id;
}
不,java没有这种“相反的动作”。但是你可以做一些简单的计算:
if(id == 1 || id == 3){
partnerID = 4 - id;
}else if(id == 2 || id == 4){
partnerID = 6 - id;
}
使用Java 8和可选
,您可以以功能性的方式分配partnerID
操作被封装并参数化,这消除了数值常量1、2、3、4的重复。问题是返回操作的逻辑和数值输出。我们必须知道是否满足条件,并且我们需要交换的结果。这可以通过返回null
来完成,但要使用Op它变得更加优雅
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);
}
intpartnerId=swap(1,3,id).map(可选::of)
.orElse(swap(2,4,id)).map(可选::of)
.orElse(可选的.of(defaultPartnerId)).get();
专用静态可选交换(int a、int b、int x){
if(x!=a&&x!=b)返回可选的.empty();
返回可选。of(a+b-x);
}
使用Java 8和可选
,您可以以功能性的方式分配partnerID
操作被封装并参数化,这消除了数值常量1、2、3、4的重复。问题是返回操作的逻辑和数值输出。我们必须知道是否满足条件,并且我们需要交换的结果。这可以通过返回null
来完成,但要使用Op它变得更加优雅
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);
}
intpartnerId=swap(1,3,id).map(可选::of)
.orElse(swap(2,4,id)).map(可选::of)
.orElse(可选的.of(defaultPartnerId)).get();
专用静态可选交换(int a、int b、int x){
if(x!=a&&x!=b)返回可选的.empty();
返回可选。of(a+b-x);
}
首先使用开关
。我知道开关语句,但它只是笨重难看@MohammedAoufZOUAG@GeorgeMulligan这有点太复杂了,尤其是在这种情况下。@Programmerg删除了注释,因为它并没有真正回答问题。然而,地图方法更容易理解除了目前的答案,特别是如果像我提到的那样有更多的ID和合作伙伴。对不起,我应该说,对于初学者来说,只有4个ID max@GeorgeMulliganuse aswitch
。我知道switch语句,但它只是笨重难看@MohammedAoufZOUAG@GeorgeMulligan那有点太复杂了,特别是在这种情况下,答案是肯定的。@程序员删除了注释,因为它并没有真正回答问题。但是,地图方法比我目前的答案更容易阅读,特别是如果我提到的有更多ID和合作伙伴。对不起,我应该说,answe只有4个ID max@georgemulligantanksr、 这被认为是一种更合适的方法,还是一种不必要的方法。我认为这比需要的要复杂一点。@chrylis很清楚。OP想要一种更清晰的方法来解决“丑陋”问题if语句。即使有几行额外的代码,原文也更具可读性。@chrylis它非常清楚。就我个人而言,另一个答案比这个答案更有意义。有了这个答案,你需要附加一条JavaDoc注释。谢谢你的回答,这是一种更适合这种情况的方法还是一种h不是真的必要。我认为这比需要的要复杂一点。@chrylis很清楚。OP想要一个更清晰的方法来处理“丑陋”if语句。即使有几行额外的代码,原文也更可读。@chrylis它非常清楚。就我个人而言,另一个答案比这个答案更有意义。有了这个答案,你需要附加一个JavaDoc注释。。谢谢你的答案,但是对于需要的东西来说太复杂了。谢谢你的答案。谢谢你的回答。谢谢你的回答,但是对于你的回答,太复杂了需要什么