我试图编写这个程序来查找素数。我有它的基础知识,除了无论我输入什么数字,它返回为非素数。我已经把这个弄得太久了,无法弄清楚它是什么。是在我的"如果"声明或我的isPrime功能?请帮忙,谢谢!
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;
}
答案 0 :(得分:3)
if (prime = false)
您刚刚将prime
指定为false。
你不想这样做。
相比之下,您确实希望将其分配给您的功能结果。
答案 1 :(得分:1)
替换:
if(prime = false)
不仅因为您使用赋值而不是比较,而且因为未定义prime(它不会从该函数调用返回/创建全局变量prime
)。 / p>
将其替换为:
if (!isPrime(number)) {
现在,这并不是使用变量来存储isPrime调用的结果,而是直接使用该调用。如果您需要在多个地方使用此结果,那么将它分配给变量是个好主意:
var prime = isPrime(number);
然后执行其余代码:
if (prime == false)...
答案 2 :(得分:1)
isPrime(number);
不分配任何变量。因此,在测试中永远不会分配prime,并且就布尔表达式而言,未分配的变量被视为false。
应该是
var prime = isPrime(number);
你也在做一个你打算进行比较的作业。
if(prime = false)
应该是
if(prime === false)
提示:如果您正在进行这些类型的测试,通常最好将左侧无法通过赋值更改的内容放入(函数调用,常量等)。这样,如果您不小心将=而不是==或===,脚本将失败并显示错误。
if(false === prime)
如果您不小心输入
if (false = prime)
你会得到
ReferenceError:左侧无效分配
这很明显且易于调试。
由于这是一个简单的布尔开关,一个简单的“不是真的”检查就好了。
if (!prime)
答案 3 :(得分:1)
实际上他们只有2个小逻辑失败。
你在函数isPrime()中定义“prime” - 因此你不能在函数之外使用它。 你试着做if(prime = false),它将值false赋给“prime”,除了破坏它之外什么都不做。
您需要在外部定义变量,因此请使用prime = isPrime()
此外,你不需要检查“假”,这对任何方式都没有意义。 “true == false”?只是跳过那个问问if(prime)是真还是假。
另外,你可以在if条件下直接调用你的功能:
if(isPrime(number)){....
然后自动检查返回值。