J'essaie juste de comprendre pourquoi Buzz n'apparaît pas dans la nouvelle ligne après Fizz pendant 15.
J'essaie d'apprendre le JavaScript à partir de JavaScript Eloquent et je viens de faire l'exercice FizzBuzz. Notez que j'ai inclus une solution commentée où cela fonctionne (mais pas avec élégance) mais la chose que j'ai remarqué que certaines solutions recherchées en ligne montrent que leurs 15 apparaissent avec Fizz mais Buzz est sur une nouvelle ligne alors que ma solution (qui n'est pas commenté) ne montre que Fizz.
Quelqu'un peut-il m'expliquer pourquoi fait-il cela? Juste curieux. La seule chose que j'ai remarquée, c'est lorsque j'utilise
for(let int = 1; int <= 100; int++){
if(int%3 == 0){
console.log('Fizz');
}
else if(int%5 == 0){
console.log('Buzz');
}
else if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
}
/*if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
}
else if(int%3 == 0){
console.log('Fizz');
}
else if(int%5 == 0){
console.log('Buzz');
}*/
else{
console.log(int);
}
}
que ce soit à la fin ou au début du bloc, c'est lorsque les changements sont visibles.
Remarque:
Je ne demande pas de solutions. Je veux juste une explication à ma question ci-dessus. La solution commentée me donne FizzBuzz pour 15. S'il vous plaît ne vous méprenez pas et merci d'avoir pris le temps de répondre à cette question.
Ma solution:
if ((int%3 == 0) && (int%5 == 0))
p >
4 Réponses :
Si vous supprimez else de else if (int% 5 == 0) , vous obtiendrez le résultat souhaité, je suppose.
Dans votre solution, le bloc suivant est du code mort:
else if ((int%3 == 0) && (int%5 == 0)){
console.log('Fizz'+'Buzz');
Ce console.log ('Fizz' + 'Buzz') ne peut jamais être atteint car ((int% 3 == 0) && (int% 5 == 0)) signifierait que (int% 3 == 0) et donc le premier si est exécuté. En raison de la signification de else if , ce dernier bloc de code n'est jamais atteint.
Donc pour répondre directement:
montrent leurs 15 apparaissant avec Fizz mais Buzz est sur une nouvelle ligne
Il s'agit probablement d'une erreur de codage car FizzBuzz nécessite généralement d'écrire "Fizz Buzz "sur une seule ligne pendant 15. Je suppose qu'ils n'ont utilisé aucun" else if "- ce que vous avez fait.
ma solution (qui n'est pas commentée) ne montre que Fizz. Quelqu'un peut-il m'expliquer pourquoi cela fait-il cela?
Parce que sinon bloque la commande est important, et vous avez choisi la mauvaise.
Ouais, sur une nouvelle ligne est la mauvaise solution. Je voulais juste savoir pourquoi le mien n'en montre pas un dans la nouvelle ligne. Merci de m'avoir fait savoir que l'ordre de bloc est important, ce que @Richard a également mentionné ci-dessus dans les commentaires.
Vous devez inverser l'ordre de vos instructions if comme vous l'avez fait dans la section commentée. Sinon, lorsque int = 15, votre code correspondra à vrai pour
if(int%3 == 0){
console.log('Fizz');
}
Et il n'atteindra jamais les autres instructions if.
for(let int = 1; int <= 100; int++) {
if ( i % 3 === 0 && i % 5 === 0 ) {}
Votre solution commentée n'est pas inélégante - c'est la bonne façon de le faire. (cependant, vous pouvez stocker les résultats modulo dans des variables si vous le souhaitez)
if/else if/… sont traités dans l'ordre dans lequel vous les écrivez. Dans le code cité, siint $ 3 == 0est vrai, la première branche est prise et toutes les autres sont ignorées. Mais quandintvaut 15 alorsint $ 3 == 0est vrai. Vous devez mettre les cas les plus spécifiques en premier .@CertainPerformance Le stockage est l'une des idées que j'avais. Il suffit de tester d'abord les méthodes conventionnelles de le faire.
@Richard Oh. Je ne savais pas si / sinon si / .. sont traités dans l'ordre dans lequel je les écris. Merci.