Циклы 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 ); // простое число Объясните пожалуйста принцип действия этого цикла, с другими методами всё ок, но этот труднит |
Я написал сам что то подобное, и что тут не так?
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) } |
Цитата:
|
Цитата:
|
Я хотел создать аналогичный пример
|
i будет делиться на j при каждой итерации?
|
Допустим:
Если i меньше n и добавляем постоянно по 1 к i Но мы также к j будем добавлять 1? ведь они идентичны, и, соответственно, будут делиться одинаково? Тоесть 2/2 | 3/3 и т.д и при четных числах будут пропускать полностью цикл? Ведь всегда будет четное число 0. Короче я хз, если можете - разжуйте для меня. таланта нет, но есть упорство. Если в первом цикле показывает true - мы переходим к следующему циклу и там показывает true. Значит выполняем continue. Выполняем шаги, где i++ и j++. Будет в обоих переменных по 3 и делиться они будут 3/3 Если вас не затруднит, помогите, я очень на вас рассчитываю, не могу никак понять. А в примере ниже я хотел что бы цикл остановился на k = 12, но в консоле не было сложения - ничего не показало |
Цитата:
3 % 2 не равно 0. Далее - во внутреннем цикле стоит условие: j < i, значит этот цикл завершится на j равным двум, и далее исполнится алерт. |
Цитата:
k=+2 -> k+=2 |
Белый шум,
Спасибо, но еще кое что хочу спросить. Вот i % j == 0. Что это значит? Если там будет написано !== 0. Это четное/нечетное число? Где при ==0 - четное - пропускаем итерацию и по новому кругу, где внешний цикл == 4 и внутренний 3? и при !==0 - нечетное - спускаемся на alert |
Спасибо
|
Цитата:
3 % 2 - будет один. 9 % 3 - будет ноль. Затем этот результат сравнивается с нулём: == 0 Логика простая: если нашёлся хоть один делитель (j) для текущего делимого (i), при котором результат - ноль, то это число не является простым, а значит мы его пропускаем и идём проверять следующее. Если же внутренний цикл полностью отработал, значит делителя не нашлось, а значит данное число является простым. |
Спасибо, я всё понял.
Если будут ещё вопросы - я знаю к кому обратиться. Спасибо большое, никак не мог понять принцип работы. |
Заключительный вопрос.
Во внутреннем цикле j всегда начинается с 2? Или при ==0 мы запускаем цикл по новому, где, допустим, I == 4, а внутренний цикл уже 3? Или он также начинается с 2, и мы будем повторять цикл до тех пор, пока внешний цикл/ внутренний цикл не покажет ==1 Просто в предыдущем ответе вы сказали, что внутренний цикл начинается сначала и будет ==2, где внешний уже 3. Надеюсь понятно описал вопрос |
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 ); // простое число Вот как я это понимаю: просто скажите где не так и мне будет достаточно Если I <= n то мы переходим вниз к другому циклу В нём j < I - это false и он завершается Переходим опять наверх, где I++ Итого i ==3 и j == 2 Далее j < I - true Мы делаем (i%j) и если получается == 1, то мы переходим к алерт Если i% j покажет в каком то случае 0, то цикл вернётся вначало и добавит по 1 к каждой переменной Сижу на работе просто, с телефона неудобно, так бы перелопатил все полученные знания, но пока так. Если я туплю - не обижайтесь, я не специально |
Цитата:
Подробнее тут - https://learn.javascript.ru/while-for#tsikl-for |
Я вам очень благодарен. Вы единственный, кто действительно помог мне. Конечно на других форумах я тоже спрашивал, но палец вверх я ставлю вам
|
Часовой пояс GMT +3, время: 06:41. |