[英]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.