Ответ 1
с использованием помеченного прерывания
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
Также см.
Если у меня есть цикл в цикле и один раз, если оператор выполняется, я хочу разбить основной цикл, как я должен это делать?
Это мой код:
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.
}
}
}
}
с использованием помеченного прерывания
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
Также см.
Вы можете добавить метки в свой цикл и использовать labelled break
для выхода из соответствующего цикла: -
outer: for (...) {
inner: for(...) {
if (someCondition) {
break outer;
}
}
}
См. эти ссылки для получения дополнительной информации: -
Вы можете просто return
управлять этой функцией. Или используйте уродливый подход break labels
:)
Если после инструкции for есть еще одна часть кода, вы можете реорганизовать циклы в функции.
IMO использование прерываний и продолжения должно быть обескуражено в ООП, поскольку они влияют на читаемость и обслуживание. Конечно, есть случаи, когда они удобны, но в целом я думаю, что мы должны избегать их, поскольку они будут поощрять использование программирования стиля goto.
По-видимому, вариации на эти вопросы публикуются много, здесь. Питер предоставил некоторые хорошие и нечетные виды использования, используя метки.
Похоже, для Java помеченный перерыв - это способ пойти (на основе консенсуса других ответов).
Но для многих (большинства?) других языков или если вы хотите избежать любого потока goto
, такого как поток управления, вам нужно установить флаг:
bool breakMainLoop = false;
for(){
for(){
if (some condition){
breakMainLoop = true;
break;
}
}
if (breakMainLoop) break;
}
просто для удовольствия
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]
Лучшие и легкие методы для новичков даже
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;
}
}