Подтвердить что ты не робот

Как выйти из основного/внешнего цикла в двойном/вложенном цикле?

Если у меня есть цикл в цикле и один раз, если оператор выполняется, я хочу разбить основной цикл, как я должен это делать?

Это мой код:

    for(int d = 0; d < amountOfNeighbors; d++){
        for(int c = 0; c < myArray.size(); c++){
            if(graph.isEdge(listOfNeighbors.get(d), c)){
                if(keyFromValue(c).equals(goalWord)){ // once this is true I want to break main loop.
                    System.out.println("We got to GOAL! It is "+ keyFromValue(c));
                    break; // this breaks second loop not main one.
                }
            }
        }
    }
4b9b3361

Ответ 2

Вы можете добавить метки в свой цикл и использовать labelled break для выхода из соответствующего цикла: -

outer: for (...) {
    inner: for(...) {
        if (someCondition) {
            break outer;
        }
    }
} 

См. эти ссылки для получения дополнительной информации: -

Ответ 3

Вы можете просто return управлять этой функцией. Или используйте уродливый подход break labels:) Если после инструкции for есть еще одна часть кода, вы можете реорганизовать циклы в функции.

IMO использование прерываний и продолжения должно быть обескуражено в ООП, поскольку они влияют на читаемость и обслуживание. Конечно, есть случаи, когда они удобны, но в целом я думаю, что мы должны избегать их, поскольку они будут поощрять использование программирования стиля goto.

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

Ответ 4

Похоже, для Java помеченный перерыв - это способ пойти (на основе консенсуса других ответов).

Но для многих (большинства?) других языков или если вы хотите избежать любого потока goto, такого как поток управления, вам нужно установить флаг:

bool breakMainLoop = false;
for(){
    for(){
        if (some condition){
            breakMainLoop = true;
            break;
        }
    }
    if (breakMainLoop) break;
}

Ответ 5

просто для удовольствия

for(int d = 0; d < amountOfNeighbors; d++){
    for(int c = 0; c < myArray.size(); c++){
        ...
            d=amountOfNeighbors;
            break;
        ...
    }
    // no code here
}

комментарий break label: это перетаскивание вперед, оно может разорвать любое утверждение и перейти к следующему:

foo: // label the next statement (the block)
{
    code ...
    break foo;  // goto [1]
    code ...
}

//[1]

Ответ 6

Лучшие и легкие методы для новичков даже

outerloop:
 for(int i=0; i<10; i++){
    // here we can break Outer loop by 
    break outerloop;

innerloop:
  for(int i=0; i<10; i++){
      // here we can break innerloop by 
      break innerloop;
   }
}