Partage
  • Partager sur Facebook
  • Partager sur Twitter

For : valeur calculée dans la boucle = NAN

La valeur calculée dans la boucle se perd en sortie de boucle

    22 septembre 2022 à 14:57:09

    Bonjour, 

    J'ai ce bout de code : 

    if(dateVoulue <= dateMin && dateVoulue >= dateMax)
            {
                var LRD = 0;
                for(var i=0i<=indiceMax;i++)
                {
                   var valeur = parseInt(Object.values(dict)[i]);
                   LRD = LRD + valeur;
                }  
                alert(LRD);
            }

    Dans le alert, il m'affiche Nan. 

    En mettant des alert sur valeur a chaque tour de boucle, il m'affiche bien les valeurs : 300, 300,300...de mon dictionnaire

    Donc, je pense qu'en sortant du FOR, LRD prend une valeur indéfinie. 

    Vous avez déjà rencontré ça ?

    Comment le solutionner ?

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2022 à 16:09:52

      Hello, pour debugger on utilise des console.log(); je t'invite donc à en mettre un dans ta boucle en observant ta var "valeur"

      Si tu additionne un int avec un string alors NAN est le résultat.

       tu as regarder ta console pour voir si une erreur existait ? 

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2022 à 17:20:57

        Bonjour.

        Il ne manquerait un ; dans le for ?

        • Partager sur Facebook
        • Partager sur Twitter
          23 septembre 2022 à 14:13:17

          Bonjour,

          Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
          Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

          Pour plus d'informations, nous vous invitons à lire les règles générales du forum

          Merci de colorer votre code à l'aide du bouton Code

          Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue.

          Merci de modifier votre message d'origine en fonction.

          • Partager sur Facebook
          • Partager sur Twitter

          Pas d'aide concernant le code par MP, le forum est là pour ça :)

            23 septembre 2022 à 23:36:36

            Bonjour, ta condition semble avoir était écrite à l'envers, dans sa logique de lecture en tout cas.

            Je t'invite à la relire:

            if(dateVoulue <= dateMin && dateVoulue >= dateMax)

            Ton block de code est exécuté uniquement si dateVoulue est en dehors des limites de dateMin est dateMax ce qui semble être une erreur (même si c'est possible que ce soit le comportement attendu).

            La forme logique semblerait être celle-ci:

            if(dateVoulue >= dateMin && dateVoulue <= dateMax)

            @Aurélien10! effectivement il y a eu un point-virgule oublié dans l'en-tête de la boucle for:

            for(var i=0i<=indiceMax;i++)

            qui aurait dut être:

            for(var i=0; i<=indiceMax; i++)

            Mais à mon avis c'est une faute lorsqu'il a copié son code sur le forum car son erreur provient du typage incorrect (NaN) alors que celle-ci aurait dut levait une exception (SyntaxError).

            J'imagine que c'est cette instruction qui te renvois la valeur NaN (Not a Number):

            var valeur = parseInt(Object.values(dict)[i]);

            Pour le vérifier tu peux comme te la conseiller @GaelPitras2 ajouter un console.log

            for(var i=0i<=indiceMax;i++)
            {
                var valeur = parseInt(Object.values(dict)[i]);
                console.log(valeur);
                LRD = LRD + valeur;
            }

            Et vérifier dans la console de développement du navigateur la valeur qui est logger.

            Pour que l'on t'aide plus il faut que tu nous montres la définition des variables que tu as utilisé notamment la variable dict qui est utilisé dans l'instruction la plus sensible d'être à l'origine de l'erreur.

            var valeur = parseInt(Object.values(dict)[i]);

            Tu peux aussi nous montrer comment tu as évaluer la variable indiceMax qui est utiliser dans l'en têtes de la boucle qui détermine le nombre d'itération.

            Si tu itère en dehors de la taille du tableau tu obtiendras la valeur undefined (qui représente l'absence de valeur) en faisant une addition entre undefined est un nombre tu obtiendras la constante NaN (qui représente une erreur dans une opération arithmétique).

            Une erreur "courante" pourrait être d'avoir oublié de retirer la valeur 1 à la taille de l'itérable au moment où tu évalue indiceMax,

            par exemple en faisant quelque chose comme cela:

            var indiceMax = Object.values(dict).length;

            Avec l'évaluation ci-dessus le problème c'est quand programmation on itère en partant de l'indice 0, donc on s'arrête à l'indice N - 1,

             soit la taille - 1 qui sera le dernier élément du tableau, donc indiceMax aurait dut être évaluer de cette façon-là:

            var indiceMax = Object.values(dict).length - 1;










            • Partager sur Facebook
            • Partager sur Twitter

            suggestion de présentation.

            For : valeur calculée dans la boucle = NAN

            × 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