【问题标题】:javascript FizzBuzz / if else statementsjavascript FizzBu​​zz / if else 语句
【发布时间】:2016-09-25 14:21:53
【问题描述】:

这里是代码

var i = 0;
for (i = 1; i <= 20; i++) {
    if (i % 5 === 0 && i % 3 === 0) {
        console.log("FizzBuzz");
    } else if (i % 5 === 0) {
        console.log("Buzz");
    } else if (i % 3 === 0) {
        console.log("Fizz");
    } else {
        console.log(i);
    }
}

这是输出

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

代码没问题,运行良好,但我不明白为什么当逻辑运算符 && 在 if 语句中而不是在 else if 中时,它只打印 FizzBuzz

【问题讨论】:

  • 因为一旦一个条件为真,它就不会落入下一个条件。如果需要,请使用多个 if

标签: javascript if-statement logical-operators fizzbuzz


【解决方案1】:

一旦if (...)/else if (...)中的一个条件是true(从上到下),其余的条件不会被计算,程序进入下一个循环(下一个i)价值。

如果您交换订单:

var i = 0;
for (i = 1; i <= 20; i++) {
    if (i % 5 === 0) {
        // This evaluates to true for a number that is multiple of 5 and 3, and it prints "Buzz", and goes into the next loop.
        console.log("Buzz");
    } else if (i % 5 === 0 && i % 3 === 0) {
        console.log("FizzBuzz");
    } else if (i % 3 === 0) {
        console.log("Fizz");
    } else {
        console.log(i);
    }
}

如果您正在寻找 FizzBu​​zz 的更短版本,Paul Irish 提供了一个有趣的答案(为清楚起见添加了更多括号):

for (var i = 1; i <= 100; i++) {
    var f = i % 3 == 0, b = i % 5 == 0;
    console.log(f ? (b ? "FizzBuzz" : "Fizz") : (b ? "Buzz" : i));
}

来源:https://gist.github.com/jaysonrowe/1592432#gistcomment-790724

【讨论】:

    【解决方案2】:

    这是 else if 语句的正确方法:

    for(i = 1; i <= 100; 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);
      }
    }
    

    switch 语句的另一种解决方案:

    for(i = 1; i <= 100; i++){
     switch (true) {
      case (i % 3 === 0 && i % 5 === 0) :
        console.log('FizzBuzz');
        break;
      case (i % 3 == 0) :
        console.log('Fizz');
        break;
      case (i % 5 == 0) :
        console.log('Buzz');
        break;
      default:
        console.log(i);
        break;
      } 
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2016-06-21
      • 2015-05-16
      • 2017-03-19
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多