Boucle while

Libellés dans la boucle while en Java

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Le mot label correspond à un tag HTML dans les têtes de la plupart des développeurs PHP qui ont majoritairement connu que le monde du web. Cependant, en Java un label peut également trouver son utilité dans les opérations d'itération.

Les labels en Java servent à mieux contrôler le déroulement des opérations effectuées dans les boucles. Par exemple on peut s'imaginer une situation où l'exécution d'une boucle while ne peut être effectuée que si la boucle interne for contient les Strings contenant plus de 5 caractères de longueur. Pour ce faire il suffit d'attribuer un libellé à la boucle principale. Pour l'arrêter il faut appeler break LOOP_NAME.

L'exemple qui illustre l'utilisation du label en Java va se baser sur les entiers. On suppose que notre programme accepte un paramètre. Ce paramètre est en fait une condition qui permet d'arrêter la boucle for principale. L'arrêt s'effectue au moment où la deuxième boucle for atteint la valeur passé en paramètre. Voici le code :

public class LabelExemple {
    public static void main(String[] args) {
        int brokenValue = 0;
        try {
            brokenValue = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            System.out.println("Exception when trying to convert String to int " + e.getMessage());
        }
        mainLoop: for (int i = 0; i < 10; i++) {
            System.out.println("Go to mainLoop where i = " + i);
            childLoop: for (int j = i; j < i+10; j++) {
                if (j == brokenValue) {
                    System.out.println("j == "+brokenValue+" (j = "+j+"): mainLoop broken");
                    break mainLoop;
                } else if ((j+1)%2 == 0) {
                    System.out.println("j%2 == 0 : childLoop broken on " + j);
                    break childLoop;
                }
                System.out.println("Considering " + j + " (j) for " + i + "(i)");
            }
        }
    }
}

Et ici les résultats pour deux scénarios différents (pour bien saisir la nuance) qui prennent comme argument les entiers 8 et 10 :

java LabelExemple 10
Go to mainLoop where i = 0
Considering 0 (j) for 0(i)
j%2 == 0 : childLoop broken on 1
Go to mainLoop where i = 1
j%2 == 0 : childLoop broken on 1
Go to mainLoop where i = 2
Considering 2 (j) for 2(i)
j%2 == 0 : childLoop broken on 3
Go to mainLoop where i = 3
j%2 == 0 : childLoop broken on 3
Go to mainLoop where i = 4
Considering 4 (j) for 4(i)
j%2 == 0 : childLoop broken on 5
Go to mainLoop where i = 5
j%2 == 0 : childLoop broken on 5
Go to mainLoop where i = 6
Considering 6 (j) for 6(i)
j%2 == 0 : childLoop broken on 7
Go to mainLoop where i = 7
j%2 == 0 : childLoop broken on 7
Go to mainLoop where i = 8
Considering 8 (j) for 8(i)
j%2 == 0 : childLoop broken on 9
Go to mainLoop where i = 9
j%2 == 0 : childLoop broken on 9
Go to mainLoop where i = 0
Considering 0 (j) for 0(i)
j%2 == 0 : childLoop broken on 1
Go to mainLoop where i = 1
j%2 == 0 : childLoop broken on 1
Go to mainLoop where i = 2
Considering 2 (j) for 2(i)
j%2 == 0 : childLoop broken on 3
Go to mainLoop where i = 3
j%2 == 0 : childLoop broken on 3
Go to mainLoop where i = 4
Considering 4 (j) for 4(i)
j%2 == 0 : childLoop broken on 5
Go to mainLoop where i = 5
j%2 == 0 : childLoop broken on 5
Go to mainLoop where i = 6
Considering 6 (j) for 6(i)
j%2 == 0 : childLoop broken on 7
Go to mainLoop where i = 7
j%2 == 0 : childLoop broken on 7
Go to mainLoop where i = 8
j == 8 (j = 8): mainLoop broken

On remarque que dans le premier cas (argument de 10), la boucle mainLoop s'exécute jusqu'au bout (10 itérations, de 0 à 9). Dans le deuxième exemple d'exécution on voit que la même boucle tourne 9 fois. Elle s'arrête quand la valeur de la deuxième boucle childLoop atteint 8 spécifié en tant qu'argument d'appel.

Bien sûr, dans notre exemple on pourrait ignorer le fragment break childLoop (il est égal au break qui se réfère à la première boucle le contenant). Cependant, pour une meilleure clarté on préfère déterminer quelle itération doit se terminer.

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil JavaScript

Comment supprimer un élément style sous jQuery ?

Ce framework JavaScript permet de manipuler facilement les attributs d'un élément. On peut par exemple spécifier la position de l'image de fond pour l'attribut "style" :

$('#newBackground').css('background-position' , '0 -28px');
Comment faire pour supprimer cet attribut, par exemple dans une fonction callback ? Rien de compliqué, car il suffit tout simplement de passer une valeur vide :
$('#newBackground').css('background-position' , '');