2015-10-31 32 views
1

我需要建立一個方法來計算我家庭作業的質數。我實施了我的教授提出的算法,但它不起作用。計算素數的方法 - [JAVA]

Eclipse給出了消息:The local variable prime may not have been initialized並且不能編譯。

有人可以幫助我嗎?

public static boolean itsPrime(int nbTest){ 

    boolean prime; 

    if (nbTest <= 1){ 
     prime = false; 
    } else if (nbTest == 2){  // Two is the only even number that is prime 
     prime = true; 
    } else if ((nbTest != 2) && (nbTest % 2 == 0)){ // If it's even and different than two it is not prime 
     prime = false; 
    } else { 
     for(int i = 3; i <= Math.sqrt(nbTest); i = i+2){ 
      if (nbTest % i == 0){ 
       prime = false; 
      } else { 
       prime = true; 
      } 
     } 
    } 

    return prime; 
} 
+3

做它所說的話:P'boolean prime = false;'你也不需要做這個變量並返回它。你可以簡單地說'return false;'或'return true;' – 3kings

回答

2

只是在聲明變量時進行初始化。 EG

boolean prime = false; 
1

您沒有初始化代碼中的變量prime。通過查看它,您發現if語句的每個分支都將值賦予prime。但是,有一個例外情況,如果for循環未得到執行,該怎麼辦?那麼價值prime是未知數!所以這就是錯誤出現的原因。

我猜你想返回false如果循環沒有得到執行這樣只是初始化primefalse你把它聲明:

boolean prime = false; 

爲了讓你的代碼更好,而不是僅僅以prime分配值,你可以回來!讓我告訴你完整的代碼:

public static boolean itsPrime(int nbTest){ 

    boolean prime = false; 

    if (nbTest <= 1){ 
     return false; 
    } else if (nbTest == 2){  // Two is the only even number that is prime 
     return false; 
    } else if ((nbTest != 2) && (nbTest % 2 == 0)){ // If it's even and different than two it is not prime 
     return false; 
    } else { 
     for(int i = 3; i <= Math.sqrt(nbTest); i = i+2){ 
      if (nbTest % i == 0){ 
       prime = false; 
      } else { 
       prime = true; 
      } 
     } 
    } 

    return prime; 
}