Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Циклы for с метками (https://javascript.ru/forum/misc/85040-cikly-s-metkami.html)

deniscikasov@gmail.com 14.03.2023 20:12

Циклы for с метками
 
let n = 10;

nextPrime:
for (let i = 2; i <= n; i++) { // Для всех i…

for (let j = 2; j < i; j++) { // проверить, делится ли число…
if (i % j == 0) continue nextPrime; // не подходит, берём следующее
}

alert( i ); // простое число

Объясните пожалуйста принцип действия этого цикла, с другими методами всё ок, но этот труднит

deniscikasov@gmail.com 14.03.2023 20:12

Я написал сам что то подобное, и что тут не так?

let num = 90;
firstFor:
for(i = 16; i<num; i++) {
for (k = 2; k < i; k=+2) {
if(k === 12) break firstFor
}
console.log(i)
}

voraa 14.03.2023 21:39

Цитата:

Сообщение от deniscikasov@gmail.com
и что тут не так

А что вы хотели сделать?

voraa 14.03.2023 21:41

Цитата:

Сообщение от deniscikasov@gmail.com
Объясните пожалуйста принцип действия этого цикла, с другими методами всё ок, но этот труднит

Ну, если i делится на j, значит это не простое число. В этом случае завершаем внутренний цикл и переходим к следующей итерации внешнего цикла.

deniscikasov@gmail.com 14.03.2023 21:45

Я хотел создать аналогичный пример

deniscikasov@gmail.com 14.03.2023 21:47

i будет делиться на j при каждой итерации?

deniscikasov@gmail.com 14.03.2023 21:49

Допустим:
Если i меньше n и добавляем постоянно по 1 к i
Но мы также к j будем добавлять 1? ведь они идентичны, и, соответственно, будут делиться одинаково? Тоесть 2/2 | 3/3 и т.д и при четных числах будут пропускать полностью цикл? Ведь всегда будет четное число 0.
Короче я хз, если можете - разжуйте для меня. таланта нет, но есть упорство.
Если в первом цикле показывает true - мы переходим к следующему циклу и там показывает true. Значит выполняем continue. Выполняем шаги, где i++ и j++. Будет в обоих переменных по 3 и делиться они будут 3/3

Если вас не затруднит, помогите, я очень на вас рассчитываю, не могу никак понять.
А в примере ниже я хотел что бы цикл остановился на k = 12, но в консоле не было сложения - ничего не показало

Белый шум 15.03.2023 06:39

Цитата:

Сообщение от deniscikasov@gmail.com
Выполняем шаги, где i++ и j++. Будет в обоих переменных по 3 и делиться они будут 3/3

Нет. При второй итерации внешнего цикла i будет равно 3, а вот внутренний цикл начинается сначала, а значит j = 2.
3 % 2 не равно 0.
Далее - во внутреннем цикле стоит условие: j < i, значит этот цикл завершится на j равным двум, и далее исполнится алерт.

Aetae 15.03.2023 07:35

Цитата:

Сообщение от deniscikasov@gmail.com (Сообщение 551171)
и что тут не так?

k=+2
->
k+=2

deniscikasov@gmail.com 15.03.2023 18:08

Белый шум,
Спасибо, но еще кое что хочу спросить.
Вот i % j == 0. Что это значит? Если там будет написано !== 0.
Это четное/нечетное число?
Где при ==0 - четное - пропускаем итерацию и по новому кругу, где внешний цикл == 4 и внутренний 3?
и при !==0 - нечетное - спускаемся на alert


Часовой пояс GMT +3, время: 17:42.