запустите код с каждым оператором ‘continue’ в цикле java ‘while’

#java #while-loop

#java #цикл while

Вопрос:

Допустим, у нас есть цикл java while с большим количеством операторов continue:

 while (...)
{
    // code A...
    continue;

    // code B...
    continue;

    // code C...
    continue;

    code D...
}
  

Что, если нам нужно запускать один и тот же код перед каждым continue ? т.е. код A, B и C выше все одинаковы. Как бы вы избежали дублирования кода?

Я пытаюсь избежать дублирования кода, не «вставляя» этот код перед каждым продолжением;

Комментарии:

1. Ваш скелет кода, как указано выше, может быть слишком расплывчатым, чтобы кто-либо мог дать точный ответ. Можете ли вы показать нам фактический код?

2. Вы пробовали операторы if? Я обычно избегаю продолжения и пытаюсь позволить следующей итерации выполняться естественным потоком выполнения.

3. Вы можете переместить этот код в функцию и вызвать эту функцию перед продолжением

4. Таким образом, вы пытаетесь избежать дублирования кода, не записывая этот код перед каждым continue; . Я правильно понял?

5. Если бы это был я, я бы переместил все содержимое цикла в другой метод и заменил каждый continue на return . Возможно, ваш повторяющийся шаблон может остаться в исходном цикле.

Ответ №1:

Один из способов — использовать try...finally блок. Допустим, ваш исходный код выглядит следующим образом:

 while(...) {
    if (condition1) {
        duplicatedCode();
        continue;
    }
    ...
    if (condition2) {
        duplicatedCode();
        continue;
    }
    ...
    if (condition3) {
        duplicatedCode();
        continue;
    }
    otherCode();
}
  

Вы можете уменьшить дублирование следующим образом:

 while(...) {
    boolean shouldRun = true;
    try {
        if (condition1) {
            continue;
        }
        ...
        if (condition2) {
            continue;
        }
        ...
        if (condition3) {
            continue;
        }
        otherCode();
        shouldRun = false;
    } finally {
        if (shouldRun)
            duplicatedCode();
    }
}
  

Хотя я не уверен, что это лучше для чтения…

Комментарии:

1. Я не думаю, что это что-то добавляет к удобочитаемости кода; но я ценю ваше сотрудничество.

2. @Joseph_Marzbani Ну, вы не всегда можете съесть пирог и съесть его: ( Меньше дублирования кода или больше удобочитаемости? Зависит от того, какой из них вы считаете более важным. Я бы выбрал последнее. Давайте подождем и посмотрим, придумает ли кто-нибудь еще лучшее решение.

3. Я думаю, вы правы. Здесь будет работать некоторый оператор ‘goto’; но мы знаем, что это не вариант в Java

Ответ №2:

Вместо использования continue вы можете использовать оператор цикла, если условия аналогичны

 while(...)
{
...
continue;
...
continue;
...
}
  

измените его на

 for(....) {
if(...)
    continue;
if(...)
    continue;
}