为什么一切都不是素数?

时间:2014-10-06 14:06:06

标签: javascript

我试图编写这个程序来查找素数。我有它的基础知识,除了无论我输入什么数字,它返回为非素数。我已经把这个弄得太久了,无法弄清楚它是什么。是在我的"如果"声明或我的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;
}

4 个答案:

答案 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)){....

然后自动检查返回值。