Почему мой тест на простоту останавливается после 1 и, похоже, не может продолжаться?

#java #loops #primes #mod #primality-test

#java #циклы #простые числа #мод #primality-test

Вопрос:

Прошу прощения, если это глупый вопрос, я довольно новичок в Java, но я не могу понять, почему мой тест на простоту на основе оператора mod для чисел 1-100 останавливается на 1. Я пытался следовать своему коду, и я не понимаю, почему он не может перейти к последнему оператору else, когда possiblePrime = 2 .

Он должен просто принимать possiblePrime = 2 через операторы if и else if вплоть до последнего оператора else и печатать «2 — простое число». а затем продолжить до possiblePrime = 3, но вместо этого он проходит через циклы, как и должно быть, когда possiblePrime = 1 , как это происходит, когда онинициализируется в начале, а затем полностью останавливается, как только possiblePrime увеличивается в конце последнего оператора 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  ;
            }
        }
    }
}
  

Комментарии:

1. Вы устанавливаете possibleDivisor = 1 внутри цикла for. следовательно, он всегда будет равен 1.

Ответ №1:

Вы устанавливаете possibleDivisor = 1 внутри цикла for. следовательно, он всегда будет равен 1. Это, в свою очередь, сделает операцию по модулю равной 0 в каждом случае. possiblePrime всегда будет отличаться от possibleDivisor (1), за исключением 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  ;
            }
        }
    }
}
  

Ответ №2:

Вы поставили неправильные условия, поэтому это происходит, ваш первый оператор if if(possiblePrime%possibleDivisor != 0) всегда будет оцениваться как false, потому что вы инициализировали possibleDivisor значением 1, и ни одно из чисел не дает значения, отличного от 0, при делении на 1, поэтому в вашем коде оператор possibleDivisor ; никогда не будет выполняться.

И ваш оператор else if else if(possiblePrime != possibleDivisor) каждый раз оценивается как true except i=0 . Вот почему он не перейдет в блок else и не напечатает ваше утверждение.

Ваш цикл for не останавливается после i=0 , но только из-за того, что ваш блок else не выполняется, вам кажется, что цикл останавливается после первой итерации.