En Java, comment break interagit-il avec les boucles imbriquées?

je sais break instruction permet de sortir d'une boucle, mais le fait de sauter de boucles imbriquées ou juste le son?

37
demandé sur nbro 2011-02-24 00:39:34

4 réponses

Sans aucun ornement, break va juste sortir de la boucle la plus interne. Ainsi dans ce code:

while (true) { // A
    while (true) { // B
         break;
    }
}

break une seule des sorties de la boucle B, ainsi le code sera bouclé pour toujours.

Toutefois, Java dispose d'une fonction appelé "pauses" dans laquelle vous pouvez nommer vos boucles, puis de préciser lequel de sortir. Par exemple:

A: while (true) {
    B: while (true) {
         break A;
    }
}

ce code ne sera pas boucle pour toujours, parce que le break laisse explicitement boucle A.

fort Heureusement, cette même logique fonctionne pour continue. Par défaut, continue exécute la prochaine itération de la boucle la plus interne contenant le continue statement, mais il peut aussi être utilisé pour sauter à des itérations de boucle extérieure aussi bien en spécifiant une étiquette d'une boucle pour continuer l'exécution.

dans les langages autres que Java, par exemple, C et C++, cette instruction "labeled break" n'existe pas et il n'est pas facile de sortir d'une boucle imbriquée. Il peut être fait à l'aide de la goto déclaration, bien que cela soit généralement mal vu. Par exemple, voici à quoi ressemble une pause imbriquée en C, en supposant que vous êtes prêt à ignorer le Conseil de Dijkstra et d'utiliser goto:

while (true) {
    while (true) {
        goto done;
    }
}
done:
   // Rest of the code here.

J'espère que cela vous aidera!

80
répondu templatetypedef 2016-06-16 02:01:53

par défaut, il sort de la boucle la plus interne. Mais vous pouvez spécifiez les étiquettes et faites-le sauter de boucles externes trop.

4
répondu biziclop 2011-02-23 21:40:39

Vous pouvez également vous échapper en utilisant des Exceptions, de sorte que vous pouvez gérer plusieurs raisons

 void fkt1() {
    try {
        while (true)
            fkt2();
    } catch (YourAbortException e) {
        e.printStackTrace();
    }

    //go on
}

void fkt2() {
    while (true)
        if (abort)
            throw new YourAbortException();
}
0
répondu Marian Klühspies 2013-09-07 12:55:36

il casse une boucle . très simple. ex:

for loop
   for loop
      break;
   end for loop
end for loop

sortir de la boucle intérieure, mais encore à l'extérieur de la boucle

-3
répondu minh nguyen 2016-06-16 05:25:44