0

我正在尝试执行一个功能,该功能将在我的 console.log 中打印 1-27 之间的数字。

当一个数字可以被3整除时,应该用“Fizz”代替数字
当一个数字可以被5整除时,用“Buzz”代替它。
如果数字可以同时被 3 和 5 整除,则将其替换为“Fizzbuzz”

参考:http ://en.wikipedia.org/wiki/Fizz_buzz )

这是我的代码:

 var fizzbuzz = function(start,stop) {
    for (var x=1;x <= stop; x++)
        var string =',';
    if (x%3 == 0) {
            string += 'Fizz';
    }
    if (x%5 ==  0){
        string += 'Buzz';
    }
    if (x%5 && x%3){
        string += 'Fizzbuzz';
    }
    return string;
};

Console.log 给了我“,”,我不确定我做错了什么。

只是为了澄清。我希望我的答案打印出来1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,Fizz Buzz,16,17,Fizz,19,Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz,依此类推,具体取决于 If 语句中的“停止”。

4

4 回答 4

1

Valentins 的评论是正确的,您确实需要在循环周围添加括号。但是,您也在循环的每次迭代中重新定义字符串 var。

最后一个 if 也会使输出有点错误,例如 15 会命中所有 3 个语句并打印 FizzBu​​zzFizzBu​​zz

所以去吧

var fizzbuzz = function(start,stop) {
  var string = '';
  var addComma = false;
  for (var x=1;x <= stop; x++){
    addComma = false;
    if (x%3 == 0) {
        string += 'Fizz';
        addComma = true;
    }
    if (x%5 ==  0){
        string += 'Buzz';
        addComma = true;
    }
    if(addComma && x!== stop){
        string+=','
    }
  }
  return string;
};

这不是跟踪在何处添加逗号的最佳方法,但它可以完成工作。

于 2015-02-05T12:47:27.430 回答
1
for(let x = 0; x <=30; x++) {
if (x % 15 === 0) {
    console.log('Fizzbuzz')
} else if (x % 5 === 0) {
    console.log('Buzz')
} else if (x % 3 === 0) {
    console.log('Fizz')
} else {
    console.log(x)
}

}

this is how i dealt with it

于 2021-04-29T17:14:52.957 回答
0

你需要纠正你的 for 循环

你有

for (var x=1;x <= stop; x++)
    var string =',';

被执行到x <= stop.

如果你想像这样执行一行语句,Javascript 允许你避免使用括号。

if (a===true)
    alert(a); // This is executed when a === true

alert(b); // This is always executed no matter what a is

这里的缩进是为了说明一点,但 if 语句将执行所有内容,直到第一个分号。

另一方面,如果你想执行多行代码,如果a === true你会选择像这样使用花括号

// Alert a and alert b are only executed if a is true
if (a===true) {
    alert(a);
    alert(b);
} 

if 语句将执行花括号中的所有内容。

重要的是要注意return停止执行并退出函数。一旦你到达一个返回语句,循环将被退出。这就是为什么你应该在 for 循环之后返回整个字符串。

这是一个更好的实现,但您绝对应该尝试自己实现它

var fizzbuzz = function(start,stop) {
    var string = '';

    for (var x=1;x <= stop; x++) {
        var status = x.toString(); //Each time the loop executes a new variable `status`is created and set to the value `x` for that loop.

        // x is checked as to whether it is divisible by 3 or 5 or both, if it is divisible its status is set to a that value
        if (x%3 === 0) {
            status = 'Fizz';
        }
        if (x%5 ===  0){
            status = 'Buzz';
        }
        if (x%5 === 0 && x%3 === 0){
            status = 'Fizzbuzz';
        }

        string += status; // Append status to the end

        if (x !== stop){ // If x is not equal to the value of stop add a comma
            string += ',';
        }
    }

    return string; //This returns the string value which has had statuses and commas appended to it.
};
于 2015-02-05T12:51:13.597 回答
0

这有多个问题:(1)构造

for (var x=1;x <= 10; x++)
    statement;
otherstatement;

将在执行其他语句之前执行语句 10 次。没有大括号,Javascript 假定下一条语句是 for 循环的内容;

(2) string 变量在每次循环中都被重新定义,摆脱了之前的版本,因此 return 语句只打印出 string 的最后一个值。

(3) fizzBu​​zz if 语句的逻辑错误。如果您对除以 15 的语句执行此操作,它将执行所有三个语句。因此,第三个 iff 语句是完全多余的。

解决方案如下所示:

var fizzBuzz = function(x){
    if(x%15==0){
         return "Fizzbuzz";
    }
    if(x%3==0){
          return "Fizz";
    }
    if(x%5==0){
          return "Buzz";
    }
    return x;
    };

var mainFunction = function(start,stop){
    var str="";
    for(var i=start; i < stop; i++){
          str += fizzBuzz(i) + ", ";
    }
       return str;
    };

请注意,仅当此版本要求您打印 Fizzbuzz 而不是 FizzBu​​zz 时,才需要 %15 的第三个 if 语句。

于 2015-02-05T13:14:29.983 回答