簡體   English   中英

為什么一切都不是素數?

[英]Why is everything NOT prime?

我正在嘗試編寫此程序來查找素數。 我掌握了它的基礎知識,除了無論我輸入什么數字,它都會返回非素數。 我已經把它弄得太久了,無法弄清楚它是什么。 是在我的“ if”語句中還是我的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;
}
if (prime = false)

您剛剛將prime指定為false。

你不想那樣做。

相反,您確實希望將其分配給函數的結果。

更換:

if(prime = false)

不僅是因為您使用賦值而不是比較,還因為沒有定義質數(它不會從該函數調用中返回/創建全局變量prime )。

替換為:

if (!isPrime(number)) {

現在,它不使用變量來存儲isPrime調用的結果,而是直接使用該調用。 如果需要在多個地方使用此結果,則最好將其分配給變量:

var prime = isPrime(number);

然后執行其余代碼:

if (prime == false)...
isPrime(number);

不分配任何變量。 因此,就測試而言,永遠不會分配質數,就布爾表達式而言,未分配的變量將被視為false。

它應該是

var prime = isPrime(number);

您還要做一個打算比較的作業。

if(prime = false)

應該

if(prime === false)

提示:如果您要進行這些類型的測試,通常最好將不能通過賦值更改的內容放在左邊(函數調用,常量等)。 這樣,如果您不小心將=而不是==或===放到了該腳本中,則會失敗並顯示錯誤。

if(false === prime)

如果您不小心輸入

if (false = prime)

你會得到

ReferenceError:左側的賦值無效

這很明顯並且易於調試。

因為這是一個簡單的布爾值開關,所以簡單的“不正確”檢查就可以了。

if (!prime)

實際上它們只是2個小邏輯故障。

您在函數isPrime()內定義了“素數”-因此您不能在函數外使用它。 您嘗試執行if(prime = false),它將值false分配給“ prime” whick,如果將其破壞則不起作用。

您需要在外部定義變量,因此請使用prime = isPrime()

同樣,您也不需要檢查“假”,這無論如何都沒有任何意義。 “ true == false”? 只是跳過ans詢問if(prime)是對還是錯。

另外,您可以在以下條件下直接調用函數:

if(isPrime(number)){....

然后,它會自動檢查返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM