这是我Codecamedy's FizzBuzz lesson
的代码var i;
for ( i = 1; i > 20; i++ ) {
"hello"
if ( i % 3 === 0 ) {
if ( i % 5 === 0 ) {
"FizzBuzz";
}
else {
"Fizz";
}
}
else if ( i % 5 === 0 ) {
"Buzz";
}
else {
i;
}
}
我试图首先测试数字(i)是否可以被3整除。如果是,我想检查它是否也可以被5整除。如果两个条件都是真的,我想要它说" FizzBuzz"。如果只有第一个条件成立,它应该说" Fizz"。然后,在确定我不能被3整除之后,它应检查我是否可以被5整除并显示" Buzz"如果是这样的话。如果没有完全可分,那就应该显示数字。
正如我所料......它没有按预期工作。我做了多么令人尴尬的错误?
答案 0 :(得分:8)
首先,你的循环甚至没有开始:
for ( i = 1; i > 20; i++ )
由于中间条件最初为假,因此不会迭代一次。我想你的意思是:
for ( i = 1; i <= 20; i++ )
"FizzBuzz";
只是JavaScript忽略的字符串文字。你需要以某种方式输出这个字符串:
console.log("FizzBuzz");
此外,这个块
else {
i;
}
也没有做任何事情。你想显示那些既不被3也不能整除的数字吗?
else {
console.log(i);
}
并且,在类似的说明中,顶部循环中的"hello"
应该做什么?
从更积极的方面来说,我看到你正在使用严格的平等:
if ( i % 5 === 0 )
这是一个非常非常好的习惯。如果你不小心的话,非严格相等运算符==会做各种隐式转换。除非您有意希望发生这些隐式转换,否则始终使用严格相等。
答案 1 :(得分:3)
您的具体问题是您对for
循环有错误的认识,而"somestring"
或i
这样的陈述实际上 。你要做的是输出它做控制台(或某种其他输出流) - 如何做到这一点取决于你的Javascript运行环境,以及你想要的信息去哪里。
您还可以记住,任何可被3个和五个整除的数字都是15的倍数。
因此,您可以使用以下内容简化代码:
for all numbers in range:
if num is a multiple of 15:
print "FizzBuzz"
continue for loop
if num is a multiple of 3:
print "Fizz"
continue for loop
if num is a multiple of 5:
print "Buzz"
continue for loop
print i
有些人会抱怨循环中的多个退出或重启点,但你可以放心地忽略它们,因为他们不理解该指南背后的原因,以避免意大利面条代码。
任何可以在单个页面上看到所有控制流的代码(例如上面的11行)都不能成为意大利面条代码,特别是考虑到一致的处理。
这是等效的Javascript代码,打包到网页中进行测试:
<html><head></head><body><script type="text/javascript">
var i;
for (i = 1; i <= 20; i++) {
if (i % 15 === 0) {
document.write ("FizzBuzz<br>");
continue;
};
if (i % 3 === 0) {
document.write ("Fizz<br>");
continue;
};
if (i % 5 === 0) {
document.write ("Buzz<br>");
continue;
};
document.write (i + "<br>");
}
</script></body></html>
根据需要输出:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
答案 2 :(得分:3)
for (var i = 1; i <= 20; i++) {
if (i % 15 === 0) {
console.log("FizzBuzz");
}
else if (i % 3 === 0) {
console.log("Fizz");
}
else if (i % 5 === 0) {
console.log("Buzz");
}
else{
console.log(i);
};
}
答案 3 :(得分:2)
在考虑了所有其他非常好的答案之后:
由于您使用您提供的代码“坚持第1步”,我认为您在点击链接并阅读说明后犯了同样的错误。第1步实际上并没有要求您解决Fizzbuzz问题。要通过这一步,您只需要做一些更简单的事情。再次阅读(不是很好)的说明;)
答案 4 :(得分:1)
for ( i = 1; i > 20; i++ )
表示该程序将不执行任何操作。如果您希望变量i
以1开头并以20结尾,那么您应该像for( i = 1; i <= 20; i++)
那样执行此操作。如果你想测试一些你想要的数字,你应该使用如下函数:
function TestFizzBuzz(num){
...
...
}
TestFizzBuzz(1);
TestFizzBuzz(990);
...
答案 5 :(得分:1)
如果我们让事情变得更困难怎么办? 1)不允许分割或模运算; 2)循环必须跳过所有不必要的迭代。 这是答案:
int n3 = 3;
int n5 = 5;
int i = 3;
while (i <= 100)
{
Console.Write(i.ToString() + " - ");
if (i == n3)
{
Console.Write("fizz");
n3 = n3 + 3;
}
if (i == n5)
{
Console.Write("buzz");
n5 = n5 + 5;
}
Console.WriteLine();
i = n3 < n5 ? n3 : n5;
}
答案 6 :(得分:0)
我的解决方案:
var nums = new Array();
for (var i = 0; i < 20; i++){
nums[i] = i + 1;
}
for (var i = 0; i < 20; i++){
if((nums[i] % 5 == 0) && (nums[i] % 3 == 0)){
console.log("FizzBuzz");
}else if(nums[i] % 5 == 0){
console.log("Buzz");
}else if (nums[i] % 3 == 0){
console.log("Fizz");
}else{
console.log(nums[i]);
}
}
答案 7 :(得分:0)
为了简洁起见,让我们一行:
for (i=1;i<21;i++){console.log(i+": "+(i%3?(i%5?i:'Buzz'):(i%5?'Fizz':'FizzBuzz')));};
答案 8 :(得分:0)
for(var i =1; i<=20; i++){
if(i % 15 === 0){
console.log("FizzBuzz");
}
else if(i % 5 === 0){
console.log("Buzz");
}
else if(i % 3 === 0){
console.log("Fizz");
}
else{
console.log(i);
}
};
答案 9 :(得分:0)
目标是印刷&#34; Fizz&#34;对于可被3整除的数字(没有休息),&#34; Buzz&#34;由5和&#34; FizzBuzz&#34;按3和5,否则它应该打印数字。
因为modulo可以返回0,我们需要记住真值和假值 - 0是一个假值,因此我们需要否定测试,如果我们想检查一个数字是否真的&#34;真的&#34 ; 0
例如:!(3%3)=&gt; !(0)=&gt; !false =&gt;真
for (var i = 1; i <= 20; ++i) {
if (!(i % 3) && !(i % 5)) { // check if "i" is integral divisible by 3 & 5
console.log("FizzBuzz");
} else if (!(i % 3)) { // else check if "i" is only integral divisible by 3
console.log("Fizz");
} else if (!(i % 5)) { // else check if "i" is only integral divisible by 5
console.log("Buzz");
} else {
console.log(i); // else print the number
}
}
&#13;
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
&#13;