Member 13879282 Ответов: 3

Может ли кто нибудь объяснить как работает это условие цикла я понимаю код но только не условие цикла for


Я работал над этим кодом чтобы проверить является ли no простым или нет проблема в том что я не могу понять синтаксис plz help
Я использую этот код, чтобы найти, является ли нет простым или нет проблема находится в цикле for, я не могу понять, почему нам нужно использовать это утверждение condn (i<=num/i). Пожалуйста, у меня нет проблем с синтаксисом, у меня есть проблемы с пониманием того, как работает цикл just (i<=num/i) condn. ****/******* пакет javalearning; // этот код пытается проверить, является ли no простым или нет, разделив его на 2 3 4 и так далее .. до тех пор, пока делитель не станет меньше или равен дивиденду/делителю
import java.util.Scanner;
 public class forDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input=new Scanner(System.in);
    int num=input.nextInt();
    boolean isPrime=false;
    // this code is to illustrates prime no test using for loop
    for (int i=2; i<=num;i++)
    {
        if (num%i==0 ) {isPrime=false; break;}
        else isPrime=true;
    }
    System.out.println("IS YOUR NO A PRIME : "+isPrime);
}
} /************/
************** Пожалуйста, простите меня за использование длинной строки кодов. Спасибо за помощь

добавить комментарий

Что я уже пробовал:

я пытался использовать condn как i<=num, но я знаю, что это не сработает, так что помогите plz

3 Ответов

Рейтинг:
6

Patrice T

Цитата:
я не могу понять, зачем нам нужно это условие (i<=num/i).

Это конечное условие цикла.
Чтобы увидеть, что происходит, добавьте этот код в качестве первой строки цикла
System.out.println("Divisor : "+i);
System.out.println("End Condition : "+(num/i));

и запустите программу с простыми числами или квадратом и посмотрите, какие делители проверяются.
Другое решение-наблюдать, как ваша программа выполняется с помощью отладчика.
-----
Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
22

User 7429338

В самом начале ваша переменная инициализируется:

int i=2

Затем на каждой итерации это условие проверяется:
i<=num

После каждой итерации, пока условие не будет выполнено, i увеличивается:
i++


Простое число-это число, не делимое ни на какие целые числа, кроме 1 и сама по себе Таким образом, чтобы проверить наличие простого числа, ваше условие должно быть:
i<num


Обратите внимание, что в вашем цикле вам не нужно каждый раз присваивать isPrime значение true. Вы можете упростить его до:
boolean isPrime=true;
// this code is to illustrates prime no test using for loop
for (int i=2; i<num;i++)
{
    if (num%i==0 ) {isPrime=false; break;}
}


Рейтинг:
14

OriginalGriff

Один for петля довольно проста - она состоит из четырех частей:

for (a; b; c) d
Где:
a инициализирует цикл и настраивает его на выполнение. Это выполняется один раз, и только один раз каждый раз, когда ваш код достигает for
b выполняется непосредственно перед телом кода цикла ( d ) выполняется, и если он оценивается в true затем тело исполняется. Если это не так, то цикл выходит из строя.
c выполняется сразу после тела кода цикла ( d ) выполняется для настройки на следующую итерацию.
d это тело цикла, и это код, который выполняется один раз каждый раз, когда цикл идет по кругу.
Так что если А был
int i = 0
Б был
i < 3
С был
i++
затем тело цикла выполнялось бы три раза, один раз для i = 0; затем i=1; затем, наконец, для i = 2
И вы бы получили
a Набор I к 0
b Is i < 3? Yes - продолжить цикл
d Исполнить тело
c Добавить одну, чтобы я
b Is i < 3? Yes - продолжить цикл
d Исполнить тело
c Добавить одну, чтобы я
b Is i < 3? Yes - продолжить цикл
d Исполнить тело
c Добавить одну, чтобы я
bIs i < 3? No - exit loop.

В вашем случае, c является i < num это означает, что вы должны убедиться, что простой тест останавливается, когда значение достигает числа ("i <= num- не поможет, потому что по определению все числа делятся сами на себя)

Что касается того, почему вы могли бы использовать i <= num / i Подумайте об этом на примере.
Предположим, что num равно 41, а ваша тестовая последовательность равна:
i    num / i
2         20
3         13
4         10
5         8
6         6
7         5
Как только вы доберетесь до 6 х 6, нет смысла в дальнейшем тестировании: потому что по определению вы уже проверили делимость на 5, 4, 3 и 2!