2016-03-06 73 views
-2

我試圖編寫一個腳本來檢測數字是否是質數。該函數適用於某些數字,令人驚訝的是,它將133號打印爲一個虛假的素數。我懷疑問題在於我的break語句,所以如果是這樣的話請更正。如何在JavaScript循環中使用break語句?

這裏是我的代碼:

function prime(num){ 
    if (num == 1){console.log(num + " is not a prime number");} 
    else if (num == 2){console.log(num + " is a prime number");} 
    else if (num !==2 && num !==1){ 
     for (var i = 2; i<num; i++){ // num = 7 
      if (num % i == 0){ 
       console.log(num + " is a not prime number"); 
       break; 
      } 
      else{ 
       console.log(num + " is a prime number"); 
       break; 
      } 
     } 
    } 
} 
+1

你只知道這個號碼是不是素數,當你已經測試** **所有可能的除數。你的代碼一旦發現只有一個不能均勻分配的數字,它纔會決定該數字不是質數。 – Pointy

回答

2

你需要把你的最後輸出的num是首要外for循環。如果你不這樣做,你將在第一次迭代時總是跳出for循環。

function prime(num){ 
    if (num == 1){console.log(num + " is not a prime number");} 
    else if (num == 2){console.log(num + " is a prime number");} 
    else if (num !==2 && num !==1){ 
     for (var i = 2; i<num; i++){ // num = 7 
      if (num % i == 0){ 
       console.log(num + " is a not prime number"); 
       return; 
      } 
     } 
     console.log(num + " is a prime number"); 
    } 
} 
+1

如果檢測到非素數,則您的代碼將打印兩條消息。使用'return'而不是'break'。 –

+1

@RajaprabhuAravindasamy:或者Python的'for ... else' :-) – Bergi

+0

當我在函數中輸入133時,它會打印真假,因爲它是素數而不是素數 –

1

如果您拿出第二個break語句,代碼將工作。 這是因爲如果循環中的if條件爲假,則循環會中斷。

function prime(num){ 
     if (num == 1){console.log(num + " is not a prime number");} 
     else if (num == 2){console.log(num + " is a prime number");} 
     else if (num !==2 && num !==1){ 
     for (var i = 2; i<num; i++){ // num = 7 
      if (num % i == 0){ 
       console.log(num + " is not a prime number"); 
       return; 
      } 
     } 
     console.log(num + " is a prime number"); 
    } 
} 

這裏是工作代碼。

0

所以我們知道break關鍵字退出當前循環。在for循環中構建邏輯的方式,在循環的第一遍期間總是達到break語句。這意味着你的循環只被評估一次(對於i = 2),並且只有大於2的數字才能在你的程序中達到這一點。因此,您只能正確識別是2的倍數的非素數。

我們可以通過return修復這個問題,而不是一旦找到因素就會中斷。如果我們已經用盡了所有可能的因素,那麼我們可以打印出該數字爲素數。

function prime(num){ 
    if (num == 1) { 
     console.log(num + " is not a prime number"); 
     return; 
    } 

    if (num == 2) { 
     console.log(num + " is a prime number"); 
     return; 
    } 

    for (var i = 2; i<num; i++) { 
     if (num % i == 0){ 
      console.log(num + " is a not prime number"); 
      return; 
     } 
    } 

    // We never found a factor, which means this must be a prime number 
    console.log(num + " is a prime number"); 
} 
0
function prime(num){ 
    var isprime=true; 
    if (num == 1){console.log(num + " is not a prime number");} 
    else if (num == 2){console.log(num + " is a prime number");} 
    else { 
     for (var i = 2; i<=num/2; i++){ // num = 7 

      if (num % i == 0){ 
       console.log(num + " is a not prime number"); 
       isprime = false; 
       break; 
      } 
     } 

     if(isprime) 
     console.log(num + " is a prime number"); 
    } 
} 

幾點建議:

  1. 你不需要檢查else if (num !==2 && num !==1),因爲如果num是不是1或2會自動轉到其他條件。一個簡單的else就足夠了。

  2. 在您的for循環中,您不需要檢查,直到i<num。檢查直到i<=num/2應該是足夠的NUM能有最大的因素是NUM/2