3

我正在阅读 codeacademys JavaScript 教程,因为我是新手。本教程要求以下内容:

打印出 1 - 20
的数字。规则:
- 对于可被 3 整除的数字,打印出“Fizz”。
- 对于能被 5 整除的数字,打印出“Buzz”。
- 对于能被 3 和 5 整除的数字,在控制台中打印出“FizzBu​​zz”。
- 否则,只需打印出号码。

这是我的代码:

for (i=1; i<=20; i++) {

if(i%3==0) {
    console.log("Fizz");
} 
if(i%5==0){
    console.log("Buzz");
}else if (i%5==0 && i%3==0) {
    console.log("fizzBuzz");
} else {
    console.log(i);
}

}

我收到一个错误,说我打印出错误数量的项目,有人知道这是为什么吗?

4

10 回答 10

2

必须首先检查 3 和 5,否则其他两个语句已经为真并给出单独的日志。现在您在单个console.log语句中打印 FizzBu​​zz。

   for (i=1; i<=20; i++) {

      if (i%5==0 && i%3==0) {
          console.log("FizzBuzz");
      } else if(i%3==0) {
          console.log("Fizz");
      } else if(i%5==0){
          console.log("Buzz");
      } else {
          console.log(i);
      }

    }
于 2013-10-07T10:56:14.307 回答
1

当该值可以被 3 整除而不是 5 时,在第一个 If 语句上打印“Fizz”。

然后在第二个 if 语句中,最后一个 else 被命中,所以这个数字也将被打印出来。您需要将 if(i%5==0) 更改为 else if。

但是,当 (i%5==0 && i%3==0) 作为 else if 永远不会被击中时,现在会有一个问题。您可以通过将此作为第一个比较并将输出更改为 FizzBu​​zz 来解决此问题。

像这样:

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

在继续之前,请确保您了解为什么这可以解决您的问题,因为您很可能会再次犯同样的错误。

如果您想我解释清楚,如果您正在努力找出错误的原因,请添加评论。

于 2013-10-07T11:02:56.883 回答
0

嗨,请检查¨=¨

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);
    }
}
于 2014-01-21T04:17:15.217 回答
0

你自己试过吗?因为当你运行它时,你会得到这个输出:

1
2
"Fizz"
3
4
"Buzz"
"Fizz"
6
7
8
"Fizz"
9
"Buzz"
11
"Fizz"
12
13
14
"Fizz"
"Buzz"
16
17
"Fizz"
18
19
"Buzz"

如您所见,即使您打印了数字,您也会打印出数字Fizz,而且您实际上应该打印FizzBuzz在一行中,而不是两个单独的行。

要解决前一个问题,您应该查看您的 if/else 结构。你有一个单独的 if 开头只是 for Fizz。之后,您也将Buzz单独处理,如果没有匹配,它将打印出数字。因此,尽管您已经打印了,但您Fizz仍然要到最后一个else。因此,您应该将这两个单独的 if 块合并为一个。

另一个问题是console.log总是会单独写一行。因此,在您检查所有FizzBuzz条件的情况下,您应该打印FizzBuzz. 您还需要先检查一下,否则Buzz条件将首先出现,而没有给您打印的机会FizzBuzz

于 2013-10-07T10:57:57.537 回答
0

尝试手动遍历逻辑。如果i1,那么只有最后一个块有效。如果i3,则第一个块有效。如果i5,则第二个块起作用。如果i15,则第二个块起作用,而第三个则永远没有机会。

通常,在限制最少的条件之前运行限制最严格的条件。当您的两个块不同时,您还应该注意并仔细检查。你有四个块,只有一个是一个else块。

于 2013-10-07T10:58:07.910 回答
0

您应该在第一个 IF 中检查一个数字是否可以被 3 和 5 整除,因为可以被两者整除的数字会导致执行第一个和第二个 IF 语句。

此外,规则告诉你写出“FizzBu​​zz”,以防一个数字可以被两者整除,而此时你只打印出“Buzz”。

于 2013-10-07T10:55:01.923 回答
0

这是我得到正确答案的地方。

for(var 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);
    }
}

结果将是:

1 2 嘶嘶 4 嗡嗡声 嘶嘶声 7 8 嘶嘶声 11 嘶嘶声 13 14 嘶嘶声 16 17 嘶嘶声 19 嗡嗡声

于 2013-11-14T07:23:02.463 回答
0
var i=1;
while (i<21)
{    
    if(i%3!==0 && i%5!==0)
    {
        console.log(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");
    }   

    i++;
}
于 2016-06-27T08:21:50.917 回答
0

我不知道 Javascript,但我知道一些 Python,我遇到了同样的问题。也许这会有所帮助。我确定有人可以将其翻译为 Javascript。

这是最初的问题: 循环遍历 1 到 20 之间的数字。如果一个数字可以被 3 整除,则打印 Hip。如果该数能被 7 整除,则打印“万岁”。

这是针对类似问题的python代码:

for numbers in range(1,21):
    if numbers % 3 !=0 and numbers % 7 != 0:
        print(numbers)
    if numbers % 3 == 0:
            print("Hip")
    if numbers % 7 == 0:
            print("Hooray")

这是输出:

1 2 髋关节 4 5 髋关节万岁 8 髋关节 10 11 髋关节 13 万岁髋关节 16 17 髋关节 19 20

于 2017-10-05T22:02:17.113 回答
0
for (var i=1 ; i<=20 ; i++){
    if (i%3===0 && i%5!=0){
        console.log("Fizz");
    } else if (i%5===0 && i%3!=0){
        console.log("Buzz");
    } else if (i % 3 === 0 && i % 5 === 0 ){
        console.log("FizzBuzz");    
    } else {
        console.log (i);
    }
}
于 2015-08-23T23:19:19.947 回答