当多个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)时,代码根本不起作用。
我希望你理解我想说的话,感谢你的时间!
答案 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的最大值。
也许逻辑可以进一步减少。