为什么我的素数测试会在1点后停止并且似乎无法继续?

问题描述

如果这是一个愚蠢的问题,我表示抱歉,我对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块未执行,在您看来就像循环在第一次迭代后停止了。