Javascript 为什么一切都不是最好的?
我想写这个程序来寻找素数。我已经记下了它的基本原理,除了不管我输入什么数字,它都会以非素数的形式返回。我在这件事上纠结太久了,弄不清是什么。它是在我的“if”语句中还是在我的isPrime函数中?请帮忙,谢谢Javascript 为什么一切都不是最好的?,javascript,Javascript,我想写这个程序来寻找素数。我已经记下了它的基本原理,除了不管我输入什么数字,它都会以非素数的形式返回。我在这件事上纠结太久了,弄不清是什么。它是在我的“if”语句中还是在我的isPrime函数中?请帮忙,谢谢 var number = 0; function main() { number = parseInt(prompt("Please Enter a Number to Determine Whether or Not it is Prime:", "Enter a Nu
var number = 0;
function main()
{
number = parseInt(prompt("Please Enter a Number to Determine Whether or Not it is Prime:", "Enter a Number"));
while(isNaN(number) === true)
{ alert("You Entered an Invalid Number. Please Reenter");
number = parseInt(prompt("Please Enter a Number to Determine Whether or Not it is Prime:", "Enter a Number"));
}
isPrime(number);
if(prime = false)
{ alert("The number " + number + " is a Prime Number!"); }
else
{ alert("The number " + number + " is NOT a Prime Number!"); }
}
/*------------------------------------------------------*/
function isPrime(number)
{
if(number < 2)
{return false;}
var prime = false;
for(var i = 2; i <= Math.sqrt(number); i++)
{ if(number % i == 0)
{prime = true;}
}
return prime;
}
var编号=0;
函数main()
{
number=parseInt(提示(“请输入一个数字以确定它是否为素数:”,“输入一个数字”);
while(isNaN(数字)==true)
{警报(“您输入的号码无效,请重新输入”);
number=parseInt(提示(“请输入一个数字以确定它是否为素数:”,“输入一个数字”);
}
isPrime(数字);
if(prime=false)
{alert(“数字“+number+”是质数!”);}
其他的
{alert(“数字“+number+”不是质数!”);}
}
/*------------------------------------------------------*/
函数isPrime(数字)
{
如果(数字<2)
{返回false;}
var prime=false;
对于(var i=2;i
您刚刚将prime
赋值为false
你不想那样做
相反,您确实希望将其分配给函数的结果
您刚刚将prime
赋值为false
你不想那样做
相反,您确实希望将其分配给函数的结果。替换:
if(prime = false)
这不仅是因为使用赋值而不是比较,还因为未定义素数(它不会从该函数调用返回/创建全局变量prime
)
替换为:
if (!isPrime(number)) {
现在,它不使用变量来存储isPrime调用的结果,而是直接使用调用。如果您在多个位置需要此结果,则最好将其分配给变量:
var prime = isPrime(number);
然后执行代码的其余部分:
if (prime == false)...
替换:
if(prime = false)
这不仅是因为使用赋值而不是比较,还因为未定义素数(它不会从该函数调用返回/创建全局变量prime
)
替换为:
if (!isPrime(number)) {
现在,它不使用变量来存储isPrime调用的结果,而是直接使用调用。如果您在多个位置需要此结果,则最好将其分配给变量:
var prime = isPrime(number);
然后执行代码的其余部分:
if (prime == false)...
未指定任何变量。因此,在测试中从不指定素数,对于布尔表达式而言,未指定的变量将被视为false
应该是
var prime = isPrime(number);
你也在做一个你想做比较的作业
if(prime = false)
应该是
if(prime === false)
提示:如果你在做这些类型的测试,通常最好把赋值不能改变的东西放在左边(函数调用、常量等)。这样,如果你不小心把=而不是==或==放在左边,脚本就会出错
if(false === prime)
如果你不小心打字
if (false = prime)
你会得到
ReferenceError:左侧的分配无效
这是显而易见的,易于调试
由于这是一个简单的布尔开关,因此可以进行简单的“is not true”检查
if (!prime)
未指定任何变量。因此,在测试中从不指定素数,对于布尔表达式而言,未指定的变量将被视为false
应该是
var prime = isPrime(number);
你也在做一个你想做比较的作业
if(prime = false)
应该是
if(prime === false)
提示:如果你在做这些类型的测试,通常最好把赋值不能改变的东西放在左边(函数调用、常量等)。这样,如果你不小心把=而不是==或==放在左边,脚本就会出错
if(false === prime)
如果你不小心打字
if (false = prime)
你会得到
ReferenceError:左侧的分配无效
这是显而易见的,易于调试
由于这是一个简单的布尔开关,因此可以进行简单的“is not true”检查
if (!prime)
其实他们只是两个小逻辑故障
在函数isPrime()中定义“prime”-因此不能在函数外部使用它。
您尝试执行if(prime=false),它将值false赋给“prime”,而它除了破坏if之外对您的if没有任何作用
您需要在外部定义变量,因此请使用prime=isPrime()
此外,您不需要检查“false”,因为“false”在任何情况下都没有真正意义。“true==false”?只需跳过这一点,询问是真还是假(prime)
或者,您可以在if条件下直接调用您的函数,如:
if(isPrime(number)){....
然后它会自动检查返回值。实际上,它们只有两个小的逻辑故障
在函数isPrime()中定义“prime”-因此不能在函数外部使用它。
您尝试执行if(prime=false),它将值false赋给“prime”,而它除了破坏if之外对您的if没有任何作用
您需要在外部定义变量,因此请使用prime=isPrime()
此外,您不需要检查“false”,因为“false”在任何情况下都没有真正意义。“true==false”?只需跳过这一点,询问是真还是假(prime)
或者,您可以在if条件下直接调用您的函数,如:
if(isPrime(number)){....
然后它会自动检查返回值。你不需要写===true
;true
已经是true
。同样,使用!
。我觉得你的括号很冒犯:-/if(prime=false)
应该是if(prime==false)
或者更好的if(!prime)
。一个=
用于属性。除了语法问题,我认为你的素数测试实现也不正确。你说的是“如果数字可以被I
整除,它就是素数”。这基本上是错误的。素数检查本身是否有缺陷?