Si j'ai une boucle dans une boucle et une fois qu'une instruction if
est satisfaite, je veux rompre la boucle principale, comment suis-je censé faire cela?
Voici mon code:
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 the second loop, not the main one.
}
}
}
}
Utilisation d'une pause étiquetée:
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
Voir aussi
Vous pouvez ajouter des étiquettes à votre boucle et utiliser cette labelled break
pour sortir de la boucle appropriée: -
outer: for (...) {
inner: for(...) {
if (someCondition) {
break outer;
}
}
}
Voir ces liens pour plus d'informations:
Vous pouvez simplement return
le contrôle de cette fonction. Ou utilisez le laid break labels
approche :)
S'il existe d'autres parties de code après votre instruction for
, vous pouvez refactoriser les boucles dans une fonction.
OMI, l'utilisation des pauses et de la poursuite doit être déconseillée dans la POO, car elles affectent la lisibilité et la maintenance. Bien sûr, il y a des cas où ils sont pratiques, mais en général, je pense que nous devrions les éviter, car ils encourageront l'utilisation de la programmation goto.
Apparemment, des variations de ces questions sont souvent publiées. Ici Peter a fourni quelques bonnes et étranges utilisations en utilisant des étiquettes.
Il ressemble à Java une rupture étiquetée semble être la voie à suivre (basée sur le consensus des autres réponses).
Mais pour beaucoup (la plupart?) D'autres langues, ou si vous voulez éviter tout goto
comme le flux de contrôle, vous devez définir un indicateur:
bool breakMainLoop = false;
for(){
for(){
if (some condition){
breakMainLoop = true;
break;
}
}
if (breakMainLoop) break;
}
Juste pour le fun:
for(int d = 0; d < amountOfNeighbors; d++){
for(int c = 0; c < myArray.size(); c++){
...
d = amountOfNeighbors;
break;
...
}
// No code here
}
Commenter break label
: c'est un goto avant. Il peut casser n'importe quelle déclaration et passer à la suivante:
foo: // Label the next statement (the block)
{
code ...
break foo; // goto [1]
code ...
}
//[1]
Les méthodes les meilleures et les plus faciles pour les débutants, même:
outerloop:
for(int i=0; i<10; i++){
// Here we can break the outer loop by:
break outerloop;
innerloop:
for(int i=0; i<10; i++){
// Here we can break innerloop by:
break innerloop;
}
}