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 :

Quitter une boucle for


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Quitter une boucle for
    Bonjour,

    J'ai une boucle for que je souhaiterais quitter quand je suis passer dans un de mes if mais je vois pas comment faire proprement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (Entry<Integer, Integer> mapEntry : map.entrySet()) {
    if(...){
     
    }else if (...){
     
    }else if(...){
     
    }
    }

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je chercher un truc plus propre que le break

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    plus "propre"? En quoi le break est sale?

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Personnellement quand j'en arrive à des trucs qui ressemblent à ça je préfère un return, ça isole les codes les uns des autres et puis ça colle un nom à ce que je fais dans cette boucle.

    Mais oui, on peut se demander d'où vient cette idée de "pas propre."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je veux si je passe dans le if, quitter la boucle car j'ai rempli une condition.
    Mon problème c'est que je trouve pas très propre de mettre plein de break

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu ne peux pas sortir d'un forEach autrement que par un break, ou un return (Enfin, je te dirais bien qu'il y a aussi le System.exit() pour sortir de la boucle, mais c'est un peu radical...) si ta boucle est dans une méthode (on sort de la méthode, donc on sort de la boucle). Parce qu'il n'y a de toute manière pas de contexte de gestion de boucle (pas de moyen d'agir sur une condition de bouclage) et pas d'autre moyen de sortir que break (vu que c'est fait pour ça). Et je ne vois trop où est le problème (d'utiliser break dans ce cas).

    Si le break te file des cauchemars (je me demande comment tu fais avec un switch pour te passer de break), avec un for, on pourrait mettre en place un boolean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    boolean loop=true;
    for(int i=0; loop & i<nb; i++) {
         if ( ... ) {
     
             loop=false;
     
        }
    }
    Avec une boucle sur itérateur, on pourrait "vider" l'itérateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while( iterator.hasNext() ) {
     
           iterator.next();
     
           if ( ... ) {
     
              while( iterator.hasNext() ) iterator.next();
     
          }
     
    }
    Mais autant mettre un break (ne serait-ce que pour éviter de passer du temps et consommer de la mémoire pour aller au boutl'itérateur). Et c'est moins lisible, plus compliqué...

    Ou alors tu filtres avant :

    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
    Optional<Entry<Integer, Integer>> opt = map.entrySet().stream().filter(e-> {
        if ( ... || ... || ... ) {
            return e;
        }
        return null;
    } ).filter(Objects::nonNull).findFirst();
    opt.ifPresent(e-> {
      if ( ... ) {
      }
      else if ( ... ) {
      }
      else if ( ... ) {
      }
     
    });
    On voit pas de break, mais c'est nettement plus compliqué... et on multiplie les tests... et la première boucle revient à tout parcourir (mais on ne réagit que sur le premier qui matche l'une des conditions, donc fonctionnellement c'est bon)

    A voir si le problème ne peut pas se résoudre en changeant la façon de le traiter. Du genre, si on veut tester si les clefs sont valides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set<String> invalidKeys = map.keySet().stream().filter(k-> !isValid(k)).collect(Collectors.toSet());
    if ( invalidKeys.isEmpty() ) {
       // ok
    }
    else {
      // ko - et on a la liste des clefs invalides au besoin
    }



    Je ne sais pas si elles seront propres ou sales, mais toute autre soluton sera plus allambiquées/compliquées, et moins performante.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. quitter en force une boucle for!
    Par Sieur_Blabla dans le forum Ada
    Réponses: 4
    Dernier message: 17/08/2009, 19h58
  2. quitter une boucle for
    Par Invité(e) dans le forum ASP
    Réponses: 2
    Dernier message: 22/04/2008, 18h22
  3. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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