Перерыв в вложенных циклах
Возможный дубликат:
Как выйти из основного/внешнего цикла в двойном/вложенном цикле?
У меня следующая ситуация:
for(int i = 0; i < schiffe.length-1; i++){
if(schiffe[i].schaden){
schlepper.fliege(schiffe[i].x,
schiffe[i].y,
schiffe[i].z);
schlepper.wirdAbgeschleppt = schiffe[i];
for(int k = 0; k < stationen.length-1; k++){
if(stationen[k].reparatur == null){
schlepper.fliege(stationen[k].x,
stationen[k].y,
stationen[k].z);
break;
}
}
}
}
Я хочу
schlepper.fliege(stationen[k].x,
stationen[k].y,
stationen[k].z);
выполняться один раз, а затем выходить из внутреннего цикла и продолжать цикл for (int i... Итак, я использовал разрыв в моем коде. Но я не уверен, правильно ли это. вызвать разрыв для всех циклов или только для второго цикла?
Ответы
Ответ 1
Он разбивает только внутренний цикл и, следовательно, делает то, что вы хотите. Чтобы разбить более одного уровня на Java, вы можете использовать "помеченный разрыв" следующим образом:
schiffe_loop:
for(int i = 0; i < schiffe.length-1; i++){
some_stuff();
for(int k = 0; k < stationen.length-1; k++){
if (something_really_bad_happened()) {
break schiffe_loop;
}
}
}
Но обычно вам это не понадобится.
В любом случае вы можете рассмотреть возможность создания отдельного метода для внутреннего цикла; это то, что вы можете легко дать имя ( "find_available_station" или что-то в этом роде), и, вероятно, потребуется где-то еще.
Кроме того, помните, что ваши петли прямо сейчас пропустят последний элемент каждого массива. Подумайте о том, почему вы используете < вместо < =; это точно так, что вы используете каждое значение от 0 до , но не включая указанный.
Ответ 2
break
разрушит самый внутренний цикл, в вашем случае 2-й цикл.
Чтобы разбить внешний цикл, вы можете использовать помеченный перерыв как:
OUTER:for(...) {
for(...) {
break OUTER;
}
}
Ответ 3
break
только вырывается из самого внутреннего цикла.
Ответ 4
break вызовет разрыв только для ближайшего цикла (второй цикл)
Ответ 5
Просто второй. Конечно, вы можете использовать "goto".
Ответ 6
Оператор break завершает ближайший замкнутый цикл или оператор switch, в котором он отображается на многих языках, но вы можете попробовать его и убедиться, что 100%.
Ответ 7
поместите внутренние две петли в функцию и используйте return, чтобы вырваться из них обоих.
Ответ 8
Если вам нужно больше контроля, вы можете использовать помеченный перерыв. Подробнее здесь. Как говорили другие, break закроет ближайший цикл.
Ответ 9
Как насчет использования логического вызова, которое вы вызываете "найденным", и используйте его следующим образом:
while(!found) {
for(...) {
//todo
}
}
Ответ 10
Думаю, вы можете сделать еще одну вещь..
для (int k = 0; k < stationen.length-1; k ++) { if (stationen [k].reparatur == null) { schlepper.fliege(Stationen [к].x, Stationen [к].y, Stationen [к].z);
k = stationen.length + 1 ;
}
}