Как вырваться из цикла while внутри цикла for - PullRequest
1 голос
/ 16 мая 2019

Мне нужно аккуратно прервать цикл while (проверка на ноль) и перейти к следующей итерации внешнего цикла for.

Я пытался поставить

for(Product: product:ListofProducts){
 while(null!=product.getDate){
    if(product.getDate>specifiedDate){
        doOnething()
    }
    else{
        doAnotherThing()
    }
    continue;
}

если дата продукта не равна нулю и выполняет onething () или anotherthing (), то я хочу перейти к следующей итерации цикла for

Ответы [ 2 ]

5 голосов
/ 16 мая 2019

Есть несколько способов.

Вы можете break из внутреннего цикла:

for(...) {
    while(...) {
       ... 
       if(condition) {
          break;
       }
       ...
    }
 }

Это оставит внутренний цикл, и внешний цикл продолжится.

Или вы можете пометить внешний цикл и использовать continue с именем.По умолчанию continue и break применяются к самому внутреннему циклу, но использование имени переопределяет это.

someName: for(...) {
    while(...) {
       ... 
       if(condition) {
          continue someName;
       }
       ...
    }
 }

Или, как правило, вы можете достичь этого без break или continue:

for(...) {
    boolean done = false;
    while(... && !done) {
       ... 
       if(condition) {
          done = true;
       }
    }
 }

Некоторые люди советуют избегать break и continue по той же причине, по которой они советуют избегать return в середине процедуры.Наличие более одной точки выхода для подпрограммы - это возможность сбить с толку читателя.

Однако это можно уменьшить, если подпрограмма будет короткой.Проблема в том, что ваши точки выхода теряются в длинных блоках кода.

0 голосов
/ 16 мая 2019
for(Product: product:ListofProducts){
 boolean done = false;
 while(null!=product.getDate && !done){
    if(product.getDate>specifiedDate){
        doOnething();
        done = true;
    }
    else{
        doAnotherThing();
        done = true;
    }
    continue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...