问题描述
如果这是一个愚蠢的问题,我表示抱歉,我对Java还是很陌生,但是我无法弄清楚为什么我对1-100的基于mod运算符的素数测试会停在1。我尝试按照我的代码进行操作而且我不明白为什么在primarily = 2的情况下为什么它无法继续到最后的else语句。
从if和else if语句一直到最后的else语句并打印“ 2是素数”,它应该只可能进入possiblePrime = 2。然后继续可能的Prime = 3,但是当可能Prime = 1时,它按原样循环,就像在开始时初始化时一样,然后在可能的Prime在最后一个else末尾递增后完全停止声明,仅打印“ 1是质数”。
感谢您可能提供的任何帮助,非常感谢!我肯定会绞尽脑汁想弄清楚这一点,而且我几乎100%地确定这是我没有看到的一些愚蠢而明显的错误。
public class PrimeFind {
public static void main(String[] args){
int possiblePrime = 1;
for(int i = 1 ; i <= 100 ; i++){
int possibleDivisor = 1;
if(possiblePrime%possibleDivisor != 0){
possibleDivisor++;
}
else if(possiblePrime != possibleDivisor){
possiblePrime++;
}
else{
System.out.println(possiblePrime + " is a prime.");
possiblePrime++;
}
}
}
}
解决方法
您正在for循环中设置possibleDivisor = 1
。因此,它总是等于1。这又将使模运算在每种情况下都等于0。除了1之外,possiblePrime总是与possibleDivisor(1)不同。因此,您只能得到1。
public class PrimeFind {
public static void main(String[] args){
int possiblePrime = 1;
for(int i = 1 ; i <= 100 ; i++){
int possibleDivisor = 1; // Always 1
if(possiblePrime%possibleDivisor != 0){ // Always False because something%1 == 0
possibleDivisor++;
}
else if(possiblePrime != possibleDivisor){ // Always True except for possiblePrime=1
possiblePrime++;
}
else{
System.out.println(possiblePrime + " is a prime.");
possiblePrime++;
}
}
}
}
,
您提出了错误的条件,这就是为什么发生这种情况的原因,
您的第一个if语句0 years 0 mons 18 days 9 hours 50 mins 28.126 secs
总是会被评估为 false ,因为您用值 1 初始化了manyDivisor,并且没有数字给出除 0之外的其他值除以 1 ,因此在您的代码中,语句if(possiblePrime%possibleDivisor != 0)
将永远不会执行。
您的else if语句possibleDivisor++;
除else if(possiblePrime != possibleDivisor)
以外每次均评估为 true 。这就是为什么它不会转到else块并打印您的语句的原因。
您的for循环不会在i=0
之后停止,只是因为您的else块未执行,在您看来就像循环在第一次迭代后停止了。