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

C# Discussion :

Break dans boucle ne marche pas.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut Break dans boucle ne marche pas.
    Bonjour

    j'ai une autre question à propos de unreachable code detected.
    Ce code marche parfaitement (sans le break) pour trouver les nombres premiers jusqu'à 9: il donne 2,3,5,7.
    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
    static void Main()
        {
            int laa = 9;
            bool b;
            if (laa != 0 && laa != 1)
            {
                for (int num = 2; num <= laa; num++)
                {
                    b = true;
                    for (int div = 2; div <= num / 2; div++)
                    {
                        if (num % div == 0)
                            b = false;
                        //break;
                    }
     
                    if (b == true)
                        Console.WriteLine(num + " ");
                }
            }
        }
    Maintenant, je veux mettre un break pour que le code sorte de la boucle dès qu'il a trouvé que num % div =0. Le 9 va être divisé par 2, 3 et 4: 9%3 =0, donc je veux sortir de la boucle qui n'apporte plus rien.
    Si je mets le break, le code donne: 2,3,5,7 et 9 et j'ai un avertissement comme quoi 'div' est 'unreachable code detected' à la ligne div++.
    Deux questions:
    1) pourquoi donne-t-il le 9?
    2) comment arrêter la boucle dès que num % div = 0?
    Merci
    R.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Par défaut
    Bonjour,

    En utilisant un "while" plutôt qu'un "for", tu pourras plus facilement gérer ton cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     while(_condition) 
    {
    //ton code.... 
     
    _condition = false;
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    J'ai trouvé: le break doit être dans le if.

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Règle d'or : toujours mettre des accolades pour les instructions de bloc while, for, if, etc... cela évitera de nombreux problèmes... donc celui rencontré ici.

    Réécrivons le code :
    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
     
    static void Main()
        {
            int laa = 9;
            bool b;
            if (laa != 0 && laa != 1)
            {
                for (int num = 2; num <= laa; num++)
                {
                    b = true;
                    for (int div = 2; div <= num / 2; div++)
                    {
                        if (num % div == 0) 
                        {
                            b = false;
                            break;
                        }
                    }
     
                    if (b == true)
                        Console.WriteLine(num + " ");
                }
            }
        }
    Ton code exécutait le break quelle que soit l'évaluation de la condition dans le id. Résultat des courses, la boucle était exécutée une seule fois puis sortait. L'évaluation de l'incrément n'était donc jamais atteint.

    Cela répond également à ta seconde question : comme la boucle n'était exécutée qu'une seule fois, seul le diviseur 2 était vérifié. 9 est bien divisible par 3, mais le fait que 3 est un diviseur n'est pas vérifié dans ce cas là.

    Le break n'a de sens que si on sait que le nombre n'est pas premier. Il faut donc qu'il soit inclus dans le if

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

Discussions similaires

  1. URL copiée dans OE ne marche pas
    Par robe291 dans le forum Outlook Express / Windows Mail
    Réponses: 0
    Dernier message: 07/04/2008, 07h56
  2. Requête modif dans formulaire ne marche pas
    Par crissud dans le forum IHM
    Réponses: 2
    Dernier message: 12/04/2007, 10h31
  3. Flottement dans élément flottant : marche pas
    Par php_de_travers dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/01/2007, 18h24
  4. Réponses: 2
    Dernier message: 09/04/2006, 16h05
  5. Réponses: 13
    Dernier message: 06/03/2006, 15h25

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