Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的对比if语句_Java - Fatal编程技术网

java中的对比if语句

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语句,它可以两次执行相同的操作,我想知道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,反之亦然。

您可以使用查找表

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 a
switch
。我知道switch语句,但它只是笨重难看@MohammedAoufZOUAG@GeorgeMulligan那有点太复杂了,特别是在这种情况下,答案是肯定的。@程序员删除了注释,因为它并没有真正回答问题。但是,地图方法比我目前的答案更容易阅读,特别是如果我提到的有更多ID和合作伙伴。对不起,我应该说,answe只有4个ID max@georgemulligantanksr、 这被认为是一种更合适的方法,还是一种不必要的方法。我认为这比需要的要复杂一点。@chrylis很清楚。OP想要一种更清晰的方法来解决“丑陋”问题if语句。即使有几行额外的代码,原文也更具可读性。@chrylis它非常清楚。就我个人而言,另一个答案比这个答案更有意义。有了这个答案,你需要附加一条JavaDoc注释。谢谢你的回答,这是一种更适合这种情况的方法还是一种h不是真的必要。我认为这比需要的要复杂一点。@chrylis很清楚。OP想要一个更清晰的方法来处理“丑陋”if语句。即使有几行额外的代码,原文也更可读。@chrylis它非常清楚。就我个人而言,另一个答案比这个答案更有意义。有了这个答案,你需要附加一个JavaDoc注释。。谢谢你的答案,但是对于需要的东西来说太复杂了。谢谢你的答案。谢谢你的回答。谢谢你的回答,但是对于你的回答,太复杂了需要什么