это правильно?
Если код хочет иметь эффект i = i +1
, то это правильно. Поскольку вы уже увеличиваете i в операторе for, я буду увеличиваться в два раза, если он достигнет значения else
. Пока вы проанализировали последствия этого в своем коде, у вас все будет хорошо. В вашем случае вам не придется беспокоиться о проблемах, выходящих за границы, потому что цикл вверху завершается, если i<=mid
, и после i ++ нет кода. Однако при достижении i ++ цикл никогда не будет выполняться для определенных значений i, поскольку он эффективно пропускает итерацию.
Вот быстрый рефакторинг вашего кода для удаления бесполезных переменных. Для максимальной ясности вы должны поместить переменные обратно, но использовать более информативные имена переменных, такие как boolean isAToTheLeftOfB = ***
. Комментарии твой друг !!
package example;
if (low != mid && mid != high) {
for (int i = 0; i <= mid; i++) {
if ( ! Determinate.isPointLeftSide(a, auxiliaryListTwo.get(i), auxiliaryListTwo.get(i + 1))) {
p = auxiliaryListTwo.get(i);
} else {
if ( Determinate.isPointRightSide(a, auxiliaryListTwo.get(i + 1), auxiliaryListTwo.get(i)) && Determinate.isPointRightSide(a, auxiliaryListTwo.get(i + 1), b) ) {
p = auxiliaryList.get(i + 1);
}
else{
i++;
}
}
}
}
EDIT: Спасибо Владимиру за указание на то, что вы должны использовать оператор continue вместо прямого увеличения счетчика. Это определенно более понятно и менее подвержено ошибкам.