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

JavaScript Discussion :

Question sur boucle for


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Points : 21
    Points
    21
    Par défaut Question sur boucle for
    Bonjour,
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var prefLineLength = 20;
        var oldStr = "This is a string";
     
        var diff = prefLineLength - oldStr.length;
        var filler = 'h';
     
        for (var i = 0; i < diff; i++) {
            oldStr = filler + oldStr;
        }
     
        document.getElementById("result").innerHTML=oldStr;
    Sur la page html ça done:

    hhhhThis is a string

    C'est le resultat voulu (normalement utilisé pour ajouter du padding à gauche mais là je met des h pour plus de clareté visuelle), mais je n'arrive pas à comprendre pourquoi le h est repeté, mais pas le "this is a string".
    Encore plus etrange, si je met juste oldStr = filler; ça va afficher juste h sans répétition. Pourquoi rajouter + oldStr déclanche il une répétition et uniquement sur filler ?!!
    Des explications seraient les bienvenues merci.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Il n'y a rien d'étrange mais que de la logique...

    Tu as une chaine, à chaque tour de boucle, tu demandes que cette chaine soit remplacée par elle-même précédée d'un caractère. Donc a aucun moment tu ne demandes que la chaine initiale soit répétée...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Suffi de prendre l'algorythme et de le décomposer pour bien comprendre comment ça se passe

    prefLineLength = 20
    oldStr = "this is a string"
    diff = 20 - 16 = 4
    filler = h

    Tour 1 :
    oldStr = h + This is a string = hThis is a string
    Tour 2 :
    oldstr = h + hThis is a string = hhThis is a string
    Tour 3 :
    oldStr = h + hhThis is a string = hhhThis is a string
    Tour 4 :
    oldStr = h + hhhThis is a string = hhhhThis is a string

    Voilà, chef !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Points : 21
    Points
    21
    Par défaut
    Ok je comprends merci, c'est le "+" qui fait que oldStr change a chaque tour.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Encore plus etrange, si je met juste oldStr = filler; ça va afficher juste h sans répétition. Pourquoi rajouter + oldStr déclanche il une répétition et uniquement sur filler ?!!
    Si tu mets dans ta boucle oldStr = filler, en gros à chaque tour de boucle ça va faire oldStr = h.
    Et si tu remplace ton string par un h, 4 fois de suite, au final tu auras... un h

    Le "+" sert à concaténer deux chaînes, c'est à dire, ajouter une chaîne à la suite d'une autre.


    oldStr = filler => oldStr = h
    oldStr = "bon" + "jour" => oldStr = bonjour

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

Discussions similaires

  1. petite question rapide sur boucle for
    Par KateA dans le forum C
    Réponses: 15
    Dernier message: 08/03/2010, 23h59
  2. Blocage sur boucle for
    Par guillaume17 dans le forum Langage
    Réponses: 20
    Dernier message: 01/07/2008, 16h03
  3. Question sur boucle
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/08/2007, 20h30
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  5. [BATCH] Aide sur boucle for et test
    Par t_om84 dans le forum Windows
    Réponses: 3
    Dernier message: 07/06/2006, 10h12

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