11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour, Bonsoir,

Je me présente Felibre, je débute l'apprentissage du JS et plus généralement la prog. J'avais déjà fait un peu de Java mais ça remonte au début du siècle Smiley lol . Pour rigoler je me suis dit tiens tu vas essayer de faire les petits algos demandés parfois dans les tests techniques d'embauche. Donc j'ai commencé par le plus facile à mes yeux. Le FizzBuzz. Smiley biggrin
Le problème c'est que JS me renvoie sans arrêt la même erreur de syntaxe que je ne comprends pas mais alors absolument pas Smiley fache . (SyntaxError : expected expression, got keyword 'else')
J'ai beau retourner le truc dans tous les sens... Après peut-être que mon raisonnement ne vaut rien non plus Smiley lol mais je ne peux pas le vérifier vu que je suis bloqué sur cette erreur qui empêche l'exécution. Et je refuse d'aller voir la solution tant que je n'aurais pas régler cette bip d'erreur.
/* Instructions :
    Pour un nombre compris entre 1 et 20 FAIRE
    Si le nombre est un multiple de 3 ECRIRE "Fizz !"
    Si le nombre est un multiple de 5 ECRIRE "Buzz !"
    Si le nombre est un multiple de 3 et un multiple de 5
    ECRIRE "FizzBuzz !"
    Sinon ECRIRE le nombre.
*/    

function fizzBuzz(num) {
    for (i = 1; i<= 20; i++){
        if (i % 3 ===0){
            console.log("Fizz !");
        }
        else if (i % 5 ===0){
            console.log("Buzz !");
        }
        else if (i % 3 ===0 && i % 5 ===0 )
        {  // Ou peut-être (i % 15 === 0) ??
            console.log("FizzBuzz !");
           
        }
        else {
            console.log(i);
        }
    }
}
console.log(fizzBuzz(15));
Modérateur
Bonjour,

Déjà, la fonction "fizzBuzz" n'a pas de valeur de retour (il faut rajouter "return num;" à la fin de "fizzBuzz").

Ensuite, il faut faire le test "if (i % 3 ===0 && i % 5 ===0 )" avant les autres tests car sinon il ne sera jamais exécuté.

Du coup, ça donne ça :
function fizzBuzz(num) {
    for (i = 1; i<= 20; i++){
        if (i % 3 ===0 && i % 5 ===0 )
        {
            console.log("FizzBuzz !");
        }
        else if (i % 3 ===0){
            console.log("Fizz !");
        }
        else if (i % 5 ===0){
            console.log("Buzz !");
        }
        else {
            console.log(i);
        }
    }
    return num;
}
console.log(fizzBuzz(15));


Et comme j'imagine que c'est la variable "num" et non pas la variable "i" qu'on souhaite tester, ça devrait au final ressembler à ça :
function fizzBuzz(num) {
    if (num % 3 ===0 && num % 5 ===0 ){
        console.log("FizzBuzz !");
    }
    else if (num % 3 ===0){
        console.log("Fizz !");
    }
    else if (num % 5 ===0){
        console.log("Buzz !");
    }
    else {
        console.log(num);
    }
    return num;
}
console.log(fizzBuzz(15));
Amicalement,
Il faut garder la boucle, je pense. J'ai mal retranscris les instructions. En fait il faut faire apparaître une liste déroulante de chiffres de 1 à 20. Avec chaque fois suivant les conditions soit le nombre soit le mot magique. Smiley biggrin
Tu me donnes une solution merci c'est gentil, mais je voulais juste comprendre cette satanée erreur de syntaxe. C'est pour ça que j'ai posté le code. Pour qu'on me dise qu'est-ce qui merde dans la syntaxe. La logique je l'aurais retravaillé. De toutes façons je me doutais bien qu'avec mon niveau de lapereau de 3 semaines Smiley lol il y aurait des couacs.
Merci tout de même. Smiley smile
Modérateur
Salut,

Il te donne l'erreur a quelle ligne ?

Tu peux refaire le bout de code fonctionnel dans un fiddle pour qu'on puisse voir l'erreur en direct ?

Parceque quand je colle juste dans le fiddle : https://jsfiddle.net/undless/ng9fx8ct/
Tout marche bien (à part le cas"fizzbuzz" qui devrait être testé avant les cas séparés) et il n'y a pas d'erreur dans la console :

upload/1595838344-42161-fizzbuzz.png

T'es sur que c'est pas un bug venu d'ailleurs ? Smiley ufo

Smiley smile
Modifié par _laurent (27 Jul 2020 - 10:27)
Y a pas d’erreur de syntaxe mais peut-être un switch aurait été plus 'élégant' qu'une suite de if - else

... à voir Smiley smile