2015-11-04 17 views
2

給定三個數字作爲輸入,如果其中至少有一個是質數,則返回true。爲了解決這個問題,定義檢查一個數是否是素與否的功能和使用功能以三個數字作爲輸入,如果其中至少有一個是質數,則返回true

MyApproach:

我做了檢查第一NUM是質數,或者不是一個函數(CHECK PRIME)。檢查3個數字後,如果在該函數中有任何數字是素數,則返回true 否則爲false。

但是我得到錯誤的答案測試用例

下面是我的代碼:

public boolean anyonePrime(int num1, int num2, int num3) 
{  
    boolean b1=checkPrime(num1); 
    boolean b2=checkPrime(num2); 
    boolean b3=checkPrime(num3); 
    if((b1==true) ||(b2==true) ||(b3==true)) //@Edit 
    return true; 
    else 
    return false; 
}  
public boolean checkPrime(int num) 
{ 
    boolean b0=true; 
    if(num==1) 
     return false; //@Edit 
    else 
    { 
     for(int i=2; i<=num/2; i++) 
     { 
      if(num % i==0) 
      { 
       return false; //@Edit 
      } 
     } 
     return true; 
    } 

    if(b0==true) 
     return true; 
    else 
     return false; 
    //write your code here 
    } 
} 

@編輯通過了所有的測試案例 對於輸入

Parameters   ActualOutput Expected Output  
'169' '361' '529' true   false 
+3

你有'b0 = true;'緊接着'if(b0 == true)'。 –

+1

避免'if(b0 == true)',因爲很容易出錯,如'if(b0 = true)'。改用'if(b0)'。另外'if(condition)返回true;否則返回false「可以被重寫爲'return condition;'。 – Pshemo

+0

我想我應該在其他部分寫b0 = true。 –

回答

3

的主要問題是,b0=true始終。但..

  • 它也是相當低效的,你不要馬上停止,如果第一個是黃金,
  • 也不你馬上,如果有一個除數停止,
  • 也不停止時你達到號碼的平方根
  • 也b3 =真,應該是b3 ==真。
3

您的代碼中似乎存在拼寫錯誤。您在檢查if(b0==true);之前設置了b0=true;,因此它將始終返回true。一件簡單的事情就是在任何檢查發現它不是素數時立即返回false,而不是將b0設置爲false,然後繼續做更​​多工作。

2

試試這個:

public boolean anyonePrime(int num1, int num2, int num3) 
{  
    return (checkPrime(num1) || checkPrime(num2) || checkPrime(num3)) 
}  
    public boolean checkPrime(int num) 
    { 
    boolean b0=true; 
    if(num==1) 
    b0=false; 
    else 
    { 
     for(int i=2; i<=num/2; i++) 
     { 
     if(num % i == 0) 
     { 
      b0=false; 
     } 

     } 
    } 
     if(b0==true) 
     return true; 
     else 
     return false; 
    //write your code here 

    } 
} 

我只是刪除了 'B0 =真行' 和整理了一些代碼

相關問題