Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Codecademy FizzBuzz应用程序,卡在步骤1_Javascript_Fizzbuzz - Fatal编程技术网

Javascript Codecademy FizzBuzz应用程序,卡在步骤1

Javascript Codecademy FizzBuzz应用程序,卡在步骤1,javascript,fizzbuzz,Javascript,Fizzbuzz,这是我的密码 我试图首先测试数字(I)是否可以被3整除。如果是,我想检查它是否也可以被5整除。如果这两个条件都是真的,我希望它说“FizzBuzz”。如果只有第一个条件是真的,它应该说“嘶嘶”。然后,在确定我不能被3整除之后,它应该检查我是否可以被5整除,如果是这样的话,它会显示“嗡嗡声”。如果不能完全整除,它应该只显示数字 正如我所料。。。它没有按预期工作。我犯了什么可怕的令人尴尬的错误?首先,你的循环甚至没有启动: for ( i = 1; i > 20; i++ ) 不会迭代一次,

这是我的密码

我试图首先测试数字(I)是否可以被3整除。如果是,我想检查它是否也可以被5整除。如果这两个条件都是真的,我希望它说“FizzBuzz”。如果只有第一个条件是真的,它应该说“嘶嘶”。然后,在确定我不能被3整除之后,它应该检查我是否可以被5整除,如果是这样的话,它会显示“嗡嗡声”。如果不能完全整除,它应该只显示数字


正如我所料。。。它没有按预期工作。我犯了什么可怕的令人尴尬的错误?

首先,你的循环甚至没有启动:

for ( i = 1; i > 20; i++ )
不会迭代一次,因为中间条件最初为false。我想你的意思是:

for ( i = 1; i <= 20; i++ )
只是JavaScript忽略的字符串文本。您需要以某种方式输出此字符串:

console.log("FizzBuzz");
还有这个街区

else {
    i;
  }
他也什么都没做。是否要显示既不能被3也不能被5整除的数字

else {
    console.log(i);
  }
同样,顶部循环中的
“hello”
应该做什么


从更积极的角度来看,我看到您使用的是严格平等:

if ( i % 5 === 0 )

这是一个非常非常好的习惯。如果不小心的话,非严格等式运算符==将执行各种隐式转换。除非您有意希望发生这些隐式转换,否则请始终使用严格相等

您的具体问题是,您对
for
循环有错误的理解,而像
“somestring”
i
这样的语句实际上没有任何作用。您要做的是将其输出到控制台(或其他某种输出流)——如何执行此操作取决于Javascript运行的环境,以及您希望信息的去向

你也可以记住,任何能被3和5整除的数都是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>

for(i=1;i>20;i++)
表示程序将不执行任何操作。如果您希望变量
i
以1开头,以20结尾,那么在考虑了此处所有其他非常好的答案后,您应该像
for(i=1;i那样执行此操作:


由于您对所提供的代码“停留在步骤1”上,我假设您犯了与我在单击链接并阅读说明后犯的相同错误。步骤1实际上并没有要求您解决Fizzbuzz问题。要通过此步骤,您只需做一些简单得多的事情。请再次阅读(不是很好)说明;)

(var i=1;i如果我们让事情变得更困难怎么办?
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;
}
int n3=3;
int n5=5;
int i=3;
而(i我的解决方案:

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]);
    }
}
var nums=new Array();
对于(变量i=0;i<20;i++){
nums[i]=i+1;
}
对于(变量i=0;i<20;i++){
如果((nums[i]%5==0)和&(nums[i]%3==0)){
console.log(“FizzBuzz”);
}否则如果(nums[i]%5==0){
控制台日志(“嗡嗡声”);
}否则如果(nums[i]%3==0){
控制台日志(“嘶嘶声”);
}否则{
console.log(nums[i]);
}
}

为了简短起见,让我们在一行中完成:

for (i=1;i<21;i++){console.log(i+": "+(i%3?(i%5?i:'Buzz'):(i%5?'Fizz':'FizzBuzz')));};
for(i=1;i
for(var i=1;i的目标是为可被3整除的数字打印“Fizz”(无余数),“Buzz”被5,以及“FizzBuzz”被3和5,否则它应该打印数字

  • 模(%)返回除法的其余部分,因此如果(x%y)返回0,则选中的除法为整数
  • 由于模可以返回0,我们需要记住truthy和falsy值-0是一个falsy值,因此如果我们想检查一个数字是否为“真”0,我们需要否定测试

    e、 g.:!(3%3)=>!(0)=>!false=>true


for(var i=1;我也确保不记录“hello”串top@fivedigit-确实。我添加了一条关于这一点的注释。也许这应该是一条调试语句,只是确保程序是活动的吗?谢谢亚当。这里的建议太棒了。事实证明,在本课的第一步中,我做的太多了-请看下面安德烈亚斯的评论。@davidjcole先生-当然。好的,当你到达ne时下面是几个步骤,希望上面的内容会有用:)我刚刚完成了剩下的课程,你的评论真的很有帮助。格雷西亚斯先生。啊哈!其他的答案确实很好,也很有帮助。但是你是对的。我在这方面比自己领先了很多。这些说明应该重述。我脱掉了所有的碳酸饮料,以优异的成绩通过了这一步。谢谢。Onwards!可除以5可能更容易。只需检查它是否以5或0结尾。要检查可除以3,您可以将每个数字相加,直到您以0、3、6或9结尾。是的,您是对的,这些破解肯定会加快代码的速度。但我的解决方案是通用的,它可以与任何给定的数字对一起工作。请问===0是什么意思例如,如果(i%15===0){..},请尝试为代码添加一些解释-这对OP和未来的读者更有用。特别是在这种情况下,OP不仅仅要求工作代码,实际上还想知道原始代码哪里出错了。
function TestFizzBuzz(num){
    ...
    ...
}
TestFizzBuzz(1);
TestFizzBuzz(990);
...
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);
    };
} 
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;
}
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]);
    }
}
for (i=1;i<21;i++){console.log(i+": "+(i%3?(i%5?i:'Buzz'):(i%5?'Fizz':'FizzBuzz')));};
  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);
      }

    };