2013-03-08 91 views
0

正如你可以直接看到这是一个for循环,有一些if条件就在这里(就是你说的“if conditionals”???)。 我有2个问题实际。为什么它跳过并继续,即使第一个if语句是真的

我上CodeAcademy工作,并要求我做到这一点:

Print out the numbers from 1 - 20. 
The rules: 
For numbers divisible by 3, print out "Fizz". 
For numbers divisible by 5, print out "Buzz". 
For numbers divisible by both 3 and 5, print out "FizzBuzz" in the console. 
Otherwise, just print out the number.** 

这是我迄今所做的,我也觉得它的工作正确的,是一般正确的,万能的,但CodeAcademy不会说这是。我想知道是否有人知道我的代码是否有问题,或者如果这只是完成他们请求的确切事情的不同方式(参考上述规则)。

另外第二个问题,这更是我的好奇问题。如果我们现在以15为例。当JavaScript遇到15时如何思考。 如果15可以被3除尽,并且剩下0,那么它不应该是console.log(“Fizz”),而不是一直到几乎最后的底部代码和控制台。日志( “FizzBu​​zz”); 有人可以解释这对我来说,pleeaassee :)

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 
     if (iterator % 3 === 0) { 
      console.log("Fizz"); 

     } else if (iterator % 5 === 0) { 
      console.log("Buzz"); 

     } else if (iterator % 3 === 0) { 
      if (iterator % 5 === 0) { 
       console.log("FizzBuzz"); 
      } 
     } else { 
      console.log(iterator); 
     } 

    } 
+0

你不能用萤火虫调试吗? – topcat3 2013-03-08 16:53:07

+0

你说得对,15这个代码不应该生成“FizzBu​​zz”。你是否说过它? – 2013-03-08 16:56:54

+1

15满足您的第一个条件,因为它可以被3整除,所以可以被5和3整除的测试永远不会执行。首先测试3和5是快速的方法。 – 2013-03-08 16:58:21

回答

2

我测试你的代码,并没有得到你所描述的输出,与15成功打印“FizzBu​​zz”。我得到15的预期结果显示为“Fizz”。它不能正常工作,因为它没有机会达到最终的if语句来打印出“FizzBu​​zz”为15。一个简单的解决方法是在数字被3整除时检查可分性。

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 
    if (iterator % 3 === 0) { 
     if (iterator % 5 === 0) { 
      console.log("FizzBuzz"); //divisible by 3 and 5 
     } else { 
      console.log("Fizz"); //only divisible by 3 
     } 
    } else if (iterator % 5 === 0) { 
     console.log("Buzz"); //only divisible by 5 
    } else { 
     console.log(iterator); //not divisible by 3 or 5 
    } 
} 
+0

我意识到我在这里告诉了错误的信息,但现在有一件事让我感到担忧。 JavaScript如何知道天气对console.log Fizz,Buzz或FizzBu​​zz什么时候可以被3,5和3和5分割,除了考虑if语句的顺序。 JavaScript可以遍历所有的代码然后执行? – user2097217 2013-03-08 17:12:17

+0

@ user2097217:JavaScript解释器逐步完成所有代码。我建议你在第一个'if'条件下设置一个断点,然后遍历每个'iterator'实例的代码并查看它的行为。 – 2013-03-08 17:26:21

+0

JavaScript Rocks !!!!! :D:D:D – user2097217 2013-03-08 17:50:27

-1

它可能给你的解决方案: 只是重新安排代码:

for (var iterator = 1; iterator <= 20; iterator = iterator + 1) { 

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

    } else if (iterator % 5 === 0) { 
     console.log("Buzz"); 

    } else { 
     console.log(iterator); 
    } 

} 

首先检查条件同时满足这两个被3整除和5 ,办理入住手续后3和5分别。

+1

不,现在第二个条件永远不会达到。 – 2013-03-08 17:05:13

+0

这对我来说是自相矛盾的,因为15分为3分和5分,它如何知道天气对console.log Fizz或FizzBu​​zz或Buzz? – user2097217 2013-03-08 17:06:31