Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec "Not all codes path return a value"

Sujet résolu
    15 novembre 2017 à 22:01:04

    Bonsoir,

    Ayant commencé le c# il y a peu je me heurte à un problème. J'ai essayé de faire un programme calculant le pgcd, cependant la manière dont j'ai décidé de le faire me renvoie l'erreur "Not all codes path return a value".

    Voici le code:

    static uint MyGcd(uint a, uint b)
            {
                if (a < b)
                {
                    for (uint i = a; i >= 1; i--)
                    {
                        if ((i % a == 0) && (i % b == 0))
                        {
                            return i;
                        }
                    }
                }
                else if (b < a)
                {
                    for (uint i = b; i >= 1; i--)
                    {
                        if ((i % a == 0) && (i % b == 0))
                        {
                            return i;
                        }
                    }
                }
                else
                {
                    return a;
                }
            }

    Merci d'avance à ceux qui pourront m'aider.

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2017 à 22:32:28

      Hello,

      Sans regarder le code en détails, on discutera de ça plus tard si tu en as envie, l'erreur "Not all codes path return a value"est assez simple à comprendre.

      Cela signifie que dans ton code, il existe des chemins qui ne retournent pas de valeur, en gros ici, ta méthode est censée retourner un uint, Visual Studio te fait savoir qu'il y a des chances que cela n'arrive pas.

      Par exemple, si on entre dans le premier if(...) on passe dans la boucle for(...) et si on entre pas dans le if(...) de la boucle for(...) alors la méthode ne retournera jamais rien. Une solution simple pour éviter ça et de faire de ton dernier else le cas "par défaut". En se disant que si on arrive à ce point du code sans avoir rien retourné auparavant alors la réponse est a et donc le else ne sert à rien et laisser le return a tout seul.

      Bien sûr c'est loin d'être un code idéal mais l'important c'est de t'expliquer l'erreur et pourquoi elle est là, la beauté et la refactorisation du code vient après ;)

      Bonne continuation !

      • Partager sur Facebook
      • Partager sur Twitter
      Si un message vous a aidé, n'oubliez pas le +1 et de passer votre sujet en "Résolu" ! :)
        15 novembre 2017 à 22:47:22

        J'ai essayé de modifier le code en y ajoutant des if et en mettant le cas par defaut dans le else cependant j'ai toujours l'erreur disant que tous les chemins ne renvoient pas quelque chose.

        -
        Edité par BenjaminDecreusefond 15 novembre 2017 à 22:54:07

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2017 à 22:55:01

          Salut,

          Dans ton if et ton else if, tu ne retournes pas forcément quelque chose !

          • Partager sur Facebook
          • Partager sur Twitter
          MysteryDash / 100 MPM / Développeur Freelance C#.NET / osu! / PS4 Offline Remote Play
            15 novembre 2017 à 23:01:45

            Bonsoir,

            J'ai édité cette nouvelle version ou la on renvoie toujours une valeur cependant j'ai toujours l'erreur :

            static uint MyGcd(uint a, uint b)
                    {
                        if (a < b)
                        {
                            for (uint i = a; i >= 1; i--)
                            {
                                if ((a % i == 0) && (b % i == 0))
                                {
                                    return i;
                                }
                                else
                                {
                                    return a;
                                }
                            }
                        }
                        else if (b < a)
                        {
                            for (uint i = b; i >= 1; i--)
                            {
                                if ((a % i == 0) && (b % i == 0))
                                {
                                    return i;
                                }
                                else 
                                {
                                    return b;
                                }
                            }
                        }
                        else
                        {
                            return a;
                        }
                    }
            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2017 à 23:12:07

              Tu veux aller trop vite.

              Si tu ne remplis pas les conditions tu ne rentreras jamais dans le for(...) non plus ;)
              • Partager sur Facebook
              • Partager sur Twitter
              Si un message vous a aidé, n'oubliez pas le +1 et de passer votre sujet en "Résolu" ! :)
                15 novembre 2017 à 23:15:38

                Et en plus là pour le coup tu risques juste de sortir de ton for à la première itération !
                • Partager sur Facebook
                • Partager sur Twitter
                MysteryDash / 100 MPM / Développeur Freelance C#.NET / osu! / PS4 Offline Remote Play
                  15 novembre 2017 à 23:20:32

                  Je ne comprends pas soit a < b ou a > b ou a==b ces 3 cas sont pourtant bien traités non ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 novembre 2017 à 23:24:07

                    Oui mais si tu rentres dans la première partie du if(...) et pas dans le for(...) ?

                    Alors ton code ne renvoi rien.

                    Tu te prends trop la tête, réfléchi avant d'écrire et relis mon premier message où je parle d'un cas par défaut.

                    Vire ton dernier else et laisse le "return a" à la fin de ta méthode, ton code arrivera forcément là si aucun des gars précédant ne se produit.

                    Prend une feuille, dessine les différents cas et fais des flèches ça aide à visualiser.

                    -
                    Edité par Pyrobolser 15 novembre 2017 à 23:37:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Si un message vous a aidé, n'oubliez pas le +1 et de passer votre sujet en "Résolu" ! :)
                      15 novembre 2017 à 23:31:31

                      Ca marche ! Merci à vous deux pour votre aide, désolé pour le dérangement 

                      Bonne soirée

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Problème avec "Not all codes path return a value"

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown