IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème d'instruction break dans une boucle for


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Par défaut Problème d'instruction break dans une boucle for
    Bonjour à tous et à toutes,

    Dans le code suivant :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public static void syracuse(int debut, int fin){
            int value= 0;
            int counter = 0;
            if (debut != fin) {
                for (int n = debut; n <= fin; n++) {
                    System.out.print(n + "");
                    while(value!= 1) {
                        if(n%2 == 0) {
                            value= n/2;
                            System.out.print(" " + value);
                        } else {
                            value= n*3 + 1;
                            System.out.print(" " + value);
                        }
                        counter +=1;
                        if (value==1) {
                            System.out.println();
                            counter -=1;
                            System.out.println("Fly duration is : " + counter);
                            break;
                        }
                        n = value;
                    }
                }
            }
        }

    l'instruction break me permet de sortir du traitement while par contre l'itération dans le for ne se fait plus.

    Merci d'avance.
    Transact

  2. #2
    Membre chevronné
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Par défaut
    J'ai modifié mon code de la façon suivante :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     if (value ==1) {
                            counter -=1;
                            n = debut;
                            System.out.println(" => Fly duration is : " + counter);
                            break;
                        }

    en réinitialisant n, par contre l'itération ne se fait toujours pas.
    En fait après la première itération, la valeur de value vaut 1 donc le traitement du while(value != 1) ne se fait jamais.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je ne comprends pas la logique de ton while.tu boucle pour n de début à fin. Mais dans ton while tu met n à 1 à chaque fois.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Comme tu l'as dis toi même et aussi tchize_, ta value vaut 1, donc après le 1er passage cela ne boucle plus !

    C'était ce que tu cherchais ? as tu encore besoin d'aide ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Je vais ressortir mon argument qui a tendance à créer un raz de marée de débats par forcément utile, mais en algorithmie, le break est une hérésie.
    Si on a une condition/un cas de sortie, on l'attribue à une variable et à un test qui permet de sortir proprement de la boucle désirée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public static void syracuse(int debut, int fin){
            int value= 0;
            int counter = 0;
     
            if (debut != fin) {
                for (int n = debut; n <= fin; n++) {
                    boolean exitWhile = false;
                    System.out.print(n + "");
                    while(value!= 1 && !exitWhile) {
                        if(n%2 == 0) {
                            value= n/2;
                            System.out.print(" " + value);
                        } else {
                            value= n*3 + 1;
                            System.out.print(" " + value);
                        }
                        counter +=1;
                        if (value==1) {
                            System.out.println();
                            counter -=1;
                            System.out.println("Fly duration is : " + counter);
                            exitWhile = true;
                        } else {
                            n = value;
                        }
                    }
                }
            }
        }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Je vais ressortir mon argument qui a tendance à créer un raz de marée de débats par forcément utile, mais en algorithmie, le break est une hérésie.
    Tout à fait, c'est pour ça que j'utilise toujours un break <label>, moins de confusion . On ne va pas rentrer dans le débat, dans certains cas le break est plus lisible qu'un marqueur. Ca dépends de la complexité de la boucle. Et c'est le même débat qu'entre le return dans le code ou à la fin de fonction. Il y a les règles de bases et les exceptions dans des cas particuliers. C'est comme le copier coller de code: ça peut se faire, mais ça doit être vachement justifié

    Au passage dans le code que tu donne, c'est un mauvais exemple, le exitWhile ne sert à rien. Il n'est à true que quand valeur==1, ce qui est déjà testé dans le while.

    PS: je suis curieux de voir comment tu gère tes switch sans break

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/01/2011, 10h38
  2. Problème d'écriture dans une boucle for
    Par manaliac dans le forum Général Python
    Réponses: 1
    Dernier message: 13/07/2010, 16h46
  3. [Embedded Function] Problème dans une boucle FOR-END
    Par roilait dans le forum Simulink
    Réponses: 6
    Dernier message: 19/04/2008, 14h55
  4. Problème d'indexage dans une boucle FOR-END
    Par RAMZOON dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/10/2007, 00h59
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo