多个IF语句为真会导致问题

时间:2014-09-09 14:41:10

标签: java if-statement

当多个IF语句条件成立时,我遇到了问题。

我的情景,例如:

           if (B > A && B >= C && B > D && B> E )
           {
              while (h < B + 2)
              {
                 r.up();
                 h++;
              }
           }

           else if (D > A && D > B && D >= C && D > E )
           {
              while (h < D + 3)
              {
                 r.up();
                 h++;
              }
           }
           else if (C > A && C > B && C > D && C >= E )
           {
              while (h < C + 3)
              {
                 r.up();
                 h++;
              }
           }

这只是我实际代码的模板,只是看起来更具可读性。

代码显然更多,因为还有A和E,但我只是参与整个事情,以减少它的繁琐。

基本上,我要做的是根据哪个变量具有最高值来递增'h'。 问题是,当2个变量具有相同的值(例如B和D都是7)时,代码根本不起作用。

我希望你理解我想说的话,感谢你的时间!

3 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你会希望每次比较都使用&gt; =而不是&gt;。这将解决B = D问题。

编辑:您可能想要重构代码。有很多重复的操作。

答案 1 :(得分:2)

您应该重新构建代码,使其更具可读性,并消除重复。但首先,当多个变量具有最高值时,需要确定变量的优先顺序。

以下是如何修改代码的草图:

// You may want to make a dedicated method for this
int max = Math.max(Math.max(A, B), Math.max(C, D));
int additional;
if (max == A) {
    additional = 2;
} else if (max == B) {
    additional = 3;
} else if (max == C) {
    additional = 1;
} else if (max == D) {
    additional = 2;
} else {
    throw new IllegalStateException();
}
while (h < max + additional) {
    r.up();
    h++;
}

想法是使用条件计算结束值,但是在单个循环中进行增量。结果是没有重复循环的更清晰的代码。

答案 2 :(得分:0)

将其改编为

       int max = Integer.MIN_VALUE;
       if (B > A && B >= C && B > D && B> E )
       {
          max = B + 2;
       }
       else if (D > A && D > B && D >= C && D > E )
       {
          max = D + 3;
       }
       else if (C > A && C > B && C > D && C >= E )
       {
          max = C + 3;
       }

       if (max != Integer.MIN_VALUE)
       {
          while (h < max)
          {
             r.up();
             h++;
          }
       }

人们看到A,B,D,E,(C-1)或多或少相等,并且想要取B,C-1,D加2或3的最大值。

也许逻辑可以进一步减少。