(Javascript)给定间隔内的素数:for循环不会迭代
在下面的代码中,prime测试函数在prime时返回true,否则返回false。 我用它来打印5到20之间的素数 预期产量显然是5,7,11,13,17,19 for循环似乎没有迭代,只是停留在5。 输出就像脚本卡在无限while循环中一样 我不知道我做错了什么,也许if语句写得不对? 对javascript还是有点陌生(Javascript)给定间隔内的素数:for循环不会迭代,javascript,for-loop,if-statement,primes,Javascript,For Loop,If Statement,Primes,在下面的代码中,prime测试函数在prime时返回true,否则返回false。 我用它来打印5到20之间的素数 预期产量显然是5,7,11,13,17,19 for循环似乎没有迭代,只是停留在5。 输出就像脚本卡在无限while循环中一样 我不知道我做错了什么,也许if语句写得不对? 对javascript还是有点陌生 function is_prime(number){ if (number==2 || number==3){ return true; }
function is_prime(number){
if (number==2 || number==3){
return true;
}
if (number==0 || number==1 || number%2==0){
return false;
}
if ((number+1)%6!=0 && (number-1)%6!=0){
return false;
}
for(i=3; i-1<=parseInt(number)**.5; i+=2){
if (number%i==0){
return false;
}
}
return true;
}
for(i=5;i<=20;i++){
if(is_prime(i)){
console.log(i)
}
}
在for循环中创建了一个名为i的全局变量,然后在函数中更改该变量
在这两种情况下都使用let i。在for循环中创建了一个名为i的全局变量,然后在函数中更改该变量 在这两种情况下都使用let i。只需在for循环中添加let i=5,您需要声明i
for(let i=5;i<=20;i++){
if(is_prime(i)){
console.log(i)
}
只需在for循环中添加let i=5,您需要声明i
for(let i=5;i<=20;i++){
if(is_prime(i)){
console.log(i)
}
您没有声明变量i,因此JavaScript在全局范围内创建它。在您的函数中,您也没有声明它,因此它使用的是同一个变量,并且循环的执行并不像您期望的那样 使用let声明变量,以便它们不会发生冲突,如中所示
for (let i=5;...
请参见您没有声明变量i,因此JavaScript在全局范围内创建它。在您的函数中,您也没有声明它,因此它使用的是同一个变量,并且循环的执行并不像您期望的那样 使用let声明变量,以便它们不会发生冲突,如中所示
for (let i=5;...
请参见,因为您在循环中创建了一个全局变量。用let声明变量,一切都会正常工作。
注意:使用严格模式将不允许您再次犯一些愚蠢的错误,因为您在循环中创建了一个全局变量。用let声明变量,一切都会正常工作。 注意:使用严格模式将不允许您再次犯一些愚蠢的错误
除了在for循环中使用初始值设定项之外,这只是一种很好的做法,通常建议您为不同的变量使用不同的名称,原因有很多:
它使变量用法不那么模棱两可 有助于防止您自己和代码的其他读者稍后混淆! 如果您只在一个地方使用i,那么调试就更容易了。如果您在i中获得了意外值,那么您就知道应该在哪里查找 例如,如果我在嵌套循环,或者在一个脚本中有多个循环,我通常会从I开始,然后沿着字母表j、k、l等进行操作 基本上,只要有助于跟踪数据,您使用的任何模式都可以 除了在for循环中使用初始值设定项(这是一种很好的做法)外,通常还建议对不同的变量使用不同的名称,原因有很多: 它使变量用法不那么模棱两可 有助于防止您自己和代码的其他读者稍后混淆! 如果您只在一个地方使用i,那么调试就更容易了。如果您在i中获得了意外值,那么您就知道应该在哪里查找 例如,如果我在嵌套循环,或者在一个脚本中有多个循环,我通常会从I开始,然后沿着字母表j、k、l等进行操作基本上,只要有助于跟踪数据,您使用的任何模式都可以 始终调试您的值:console.logi会将您指向参考底图问题。这是您在不声明局部变量时遇到的问题。它们是全局的。请考虑:始终调试您的值:console.logi会将您指向参考底图问题。这是您在不声明局部变量时遇到的问题。它们是全局的。请考虑:这是一个非常好的答案的开始,但请明确指出OP提供的代码中您的意思。例如,您应该提到哪个变量是全局的,以及如何正确地对其进行编码。严格模式提示是一个很好的提示,如果在你面前措辞少一点:-这是一个非常好的答案的开始,但请准确地确定你在OP提供的代码中的意思。例如,你应该提到哪个变量是全局的,以及准确地如何正确编码它。如果你脸上的措辞少一点,严格模式提示是一个不错的提示:-