У меня возникают проблемы при условии, что условия нескольких операторов 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, но я только принимаю участие в этом, чтобы сделать его менее утомительным.
В основном, что я пытаюсь сделать, это increment 'h' в зависимости от того, какая переменная имеет самое высокое значение. Дело в том, что, когда 2 переменные имеют одинаковое значение (например, B и D оба равны 7), код вообще не работает.
Надеюсь, вы поняли, что я пытаюсь сказать и спасибо за ваше время!
Вы должны переструктурировать свой код, чтобы сделать его более читаемым и устранить повторение. Но сначала вам нужно определить порядок приоритета ваших переменных, если более одного из них имеет самое высокое значение.
Ниже приведена схема изменения кода:
// 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++;
}
Идея состоит в том, чтобы вычислить конечное значение с использованием условных выражений, но делать приращения в одном цикле. В результате получается более чистый код без повторного цикла.
Math.max
и еще один else if(...)
к приведенному выше коду. Вы можете продолжать делать это, когда расширите свой код и до пяти переменных.
Если я правильно понял ваш вопрос, вам нужно будет использовать все сравнения> =, а не>. Это решит проблему B = D.
Изменить. Возможно, вы захотите реорганизовать свой код. Существует много повторяющихся операций.
Реформируя его как
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.
Возможно, логика может быть дополнительно уменьшена.