我需要构建一个计算家庭作业素数的方法。我实施了我教授提出的算法,但它没有用。
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;
}
答案 0 :(得分:2)
在声明变量时只需初始化它。 EG
boolean prime = false;
答案 1 :(得分:1)
您没有在代码中初始化变量prime
。通过查看它,您看到if语句的每个分支都为prime
赋值。但是,有一个例外情况,如果for
循环没有被执行怎么办?那么prime
的值是未知的!这就是错误出现的原因。
如果循环没有执行,我想你想返回false
,所以当你声明它时,只需用prime
初始化false
:
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;
}