Как вывести четные числа в javascript
Перейти к содержимому

Как вывести четные числа в javascript

  • автор:

Выведите чётные числа

Допустимо, конечно, но как-то нелогично — ищем НЕчетные числа, чтобы потом пропустить вывод числа. Результат хоть и одинаковый, но логика совсем не та.

На самом-то деле надо искать четные числа и выводить их:

Эникейщик's user avatar

Если код должен выполниться всего и если он точно вам больше не пригодится, то

В ином случае, если его нужно переиспользовать, или число может измениться динамически, то

BaseScript's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.8.43486

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Цикл for JavaScript

Цикл for позволяет повторить некоторый код заданное количество раз. Вот его синтаксис:

Начальные команды — это то, что выполнится перед стартом цикла. Они выполнятся только один раз. Обычно там размещают начальные значения счетчиков, например: i = 0 .

Условие окончания цикла — это условие, при котором цикл будет крутится, пока оно истинное, например: i .

Команды после прохода цикла — это команды, которые будут выполнятся каждый раз при окончании прохода цикла. Обычно там увеличивают счетчики, например: i++ .

Давайте с помощью цикла for выведем последовательно числа от 1 до 9 :

А теперь будем увеличивать счетчик не на 1 , а на 2 :

Можно выполнить обратный отсчет:

С помощью цикла for выведите в консоль числа от 1 до 100 .

С помощью цикла for выведите в консоль числа от 11 до 33 .

С помощью цикла for выведите в консоль четные числа в промежутке от 0 до 100 .

С помощью цикла for выведите в консоль нечетные числа в промежутке от 1 до 99 .

Learn JavaScript #8. Циклы while и for.

При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.

Например, вывести товары из списка один за другим, либо просто перебрать все числа от 1 до 10 и для каждого выполнить одинаковый код.

Для многократного повторения одного участка кода предусмотрены циклы.

Цикл "While"

Цикл while имеет следующий синтаксис:

Код из тела выполняется, пока условие condition истинно.

Например, цикл ниже выводит i, пока i < 3 :

Одно выполнения тела цикла по-научному называется итерация. Цикл в примере выше совершает три итерации.

Если бы строка i+= отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить "подвисший" скрипт, а JavaScript на стороне сервера придётся "убить" процесс.

Цикл "for"

Более сложный, но при этом самый распространённый цикл — цикл for .

Выглядит он так:

Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3 :

Рассмотрим конструкцию for подробней:

    Начало — let i = 0 — Выполняется один раз при входе в цикл Условие — i < 3 — Проверяется перед каждой итерацией цикла, если оно вычислится в false , цикл остановится. Тело — alert(i) — Выполняется снова и снова, пока условие вычисляется в true . Шаг — i++ — Выполняется после тела цикла на каждой итерации перед проверкой условий.

Прерывание цикла: "break"

Обычно цикл завершается при вычислении условия в false .

Но мы можем выйти из цикла в любой момент с помощью специальной директивы break .

Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем — выдаёт:

Директива break в строке (*) полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на alert .

Вообще, сочетание "бесконечный цикл + break" — отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине или даже в нескольких местах его тела.

Переход к следующей итерации: countinue

Директива continue — "облегчённая версия" break . При её выполнении цикл не прерывается, а переходит к следующей итерации (если условие всё ещё равно true ).

Её используют, если понятно, что на текущем повторе цикла делать больше нечего.

Например, цикл ниже использует continue , чтобы выводить только нечётные значения:

Для чётных значений i , директива continue прекращает выполнение тела цикла и передаёт управление на следующую итерацию for (со следующим числом). Таким образом alert вызывается только для нечётных значений.

Метки для break/continue

Бывает, нужно выйти одновременно из нескольких уровней цикла сразу.

Например, в коде ниже мы проходимся циклами по i и j , запрашивая с помощью prompt координаты (i, j) с (0,0) до (2,2) :

$,$ — Вы видите это внутри строки, разделенной символом «?. Например, «'Меня зовут #39; <имя>» . Это новые литеральные шаблоны JS. JS заменит $ значением переменной. Это гораздо более приятный синтаксис, чем "Меня зовут" + имя.

Нам нужен способ остановить выполнение если пользователь отменит ввод.

Обычный break после input лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.

Метка имеет вид идентификатора с двоеточием перед циклом:

Вызов break <labelName> в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.

В примере выше это означает, что вызовом break outer будет разорван внешний цикл до метки с именем outer .

Таким образом управление перейдёт со строки, помеченной (*) , к alert('Готово!') .

Также можно размещать метку на отдельной строке:

Директива continue также может быть использована с меткой. В этом случае управление перейдёт на следующую итерацию цикла с меткой.

Важно

Метки не позволяют "прыгнуть" куда угодно

Метки не дают возможности передавать управление в произвольное место кода.

Например, нет возможности сделать следующее:

Директива break должна находиться внутри блока кода. Технически, подойдёт любой маркированный блок кода, например:

. Хотя в 99.9% случаев break используется внутри циклов, как мы видели в примерах выше.

К слову, continue возможно только внутри цикла.

Итого

Мы рассмотрели 3 вида циклов:

    while — Проверяет условие перед каждой итерацией do. while — Проверяет условие после каждой итерации for (;;) — Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки

Чтобы организовать бесконечный цикл, используют конструкцию while (true) . При этом он, как и любой другой цикл, может быть прерван директивой break.

Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует — используйте директиву continue .

Обе этих директивы поддерживают метки, которые ставятся перед циклом. Метки — единственный способ для break/continue выйти за пределы текущего цикла, повлиять на выполнение внешнего.

Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JS нет такой возможности.

Задачи

Последнее значение цикла

Какое последнее значение выведет этот код? Почему?

Какие значения выведет цикл while?

Для каждого цикла запишите, какие значения он выведет. Потом сравните с ответом.

    Префиксный вариант ++i :
    Постфиксный вариант i++ :

Ответ оказался неправильным во втором варианте, потому что первым значением будет i = 1 из-за того, что в сравнении будет участвовать старое значение i = 0 , а выведено будет уже увеличенное, то есть 1 .

Для каждого значения сначала происходит сравнение, потом — увеличение, а затем срабатывание alert .

При i = 4 произойдёт сравнение while (4 < 5) и оно окажется верным, поэтому после этого сработает i++ , увеличив i до 5 , так что значение 5 будет выведено. Оно станет последним.

Какие значения выведет цикл for?

Для каждого цикла запишите, какие значения он выведет.

    Постфиксная форма:

Так как шаг i++ выполняется после тела цикла на каждой итерации перед проверкой условий, то в alert будут выведены значения: 0, 1, 2, 3, 4

    Префиксная форма:

Так как шаг ++i выполняется после тела цикла на каждой итерации перед проверкой условий, то в alert будут выведены значения: 0, 1, 2, 3, 4

Такой результат обусловлен алгоритмом работы for:

    Выполнить единожды присваивание i = 0 перед чем-либо (начало). Проверить условие i < 5 Если true — выполнить тело цикла alert(i), и затем i++

Выведите чётные числа

При помощи цикла for выведите чётные числа от 2 до 10 .

Замените for на while

Перепишите код, заменив цикл for на while , без изменения поведения цикла.

Повторять цикл, пока ввод неверен

Напишите цикл, который предлагает prompt ввести число большее 100 . Если посетитель ввёл другое число — попросить ввести ещё раз, и так далее.

Цикл должен спрашивать число пока либо посетитель не введёт число, большее 100 , либо нажмёт кнопку "Отмена (ESC)" .

Предполагается, что посетитель вводит только числа.

Я знатно сгорел на этой простой задачке в 5 строк. Описывать все тяготы не буду, поэтому просто скажу, что не смог её сделать.

Вывести простые числа

Натуральное число, большее 1 , называется простым , если оно ни на что не делится, кроме себя и 1 .

Другими словами, n > 1 – простое, если при его делении на любое число кроме 1 и n есть остаток.

Например, 5 это простое число, оно не может быть разделено без остатка на 2 , 3 и 4 .

Напишите код, который выводит все простые числа из интервала от 2 до n .

Для n = 10 результат должен быть 2,3,5,7 .

P.S. Код также должен легко модифицироваться для любых других интервалов.

Аналогичная ситуация и с этой задачкой, решить я её не смог. Сначала минут 10 я пытался понять, что такое простые числа(мем), а затем пол часа пытался понять, как их можно проверить. Тильт, что тут сказать.

Циклы while, for

При написании скриптов зачастую встает задача сделать однотипное действие много раз.

Например, вывести товары из списка один за другим. Или просто перебрать все числа от 1 до 10 и для каждого выполнить одинаковый код.

Для многократного повторения одного участка кода – предусмотрены циклы.

Цикл while

Цикл while имеет вид:

Пока условие верно – выполняется код из тела цикла.

Например, цикл ниже выводит i пока i < 3 :

Повторение цикла по-научному называется «итерация». Цикл в примере выше совершает три итерации.

Если бы i++ в коде выше не было, то цикл выполнялся бы (в теории) вечно. На практике, браузер выведет сообщение о «зависшем» скрипте и посетитель его остановит.

Бесконечный цикл можно сделать и проще:

Условие в скобках интерпретируется как логическое значение, поэтому вместо while (i!=0) обычно пишут while (i) :

Цикл do…while

Проверку условия можно поставить под телом цикла, используя специальный синтаксис do..while :

Цикл, описанный, таким образом, сначала выполняет тело, а затем проверяет условие.

Синтаксис do..while редко используется, т.к. обычный while нагляднее – в нём не приходится искать глазами условие и ломать голову, почему оно проверяется именно в конце.

Цикл for

Чаще всего применяется цикл for . Выглядит он так:

Пример цикла, который выполняет alert(i) для i от 0 до 2 включительно (до 3 ):

  • Начало: i=0 .
  • Условие: i<3 .
  • Шаг: i++ .
  • Тело: alert(i) , т.е. код внутри фигурных скобок (они не обязательны, если только одна операция)

Цикл выполняется так:

  1. Начало: i=0 выполняется один-единственный раз, при заходе в цикл.
  2. Условие: i<3 проверяется перед каждой итерацией и при входе в цикл, если оно нарушено, то происходит выход.
  3. Тело: alert(i) .
  4. Шаг: i++ выполняется после тела на каждой итерации, но перед проверкой условия.
  5. Идти на шаг 2.

Иными словами, поток выполнения: начало → (если условие → тело → шаг ) → (если условие → тело → шаг ) → … и так далее, пока верно условие .

В цикле также можно определить переменную:

Эта переменная будет видна и за границами цикла, в частности, после окончания цикла i станет равно 3 .

Пропуск частей for

Любая часть for может быть пропущена.

Например, можно убрать начало . Цикл в примере ниже полностью идентичен приведённому выше:

Можно убрать и шаг :

А можно и вообще убрать всё, получив бесконечный цикл:

При этом сами точки с запятой ; обязательно должны присутствовать, иначе будет ошибка синтаксиса.

Существует также специальная конструкция for..in для перебора свойств объекта.

Мы познакомимся с ней позже, когда будем говорить об объектах.

Прерывание цикла: break

Выйти из цикла можно не только при проверке условия но и, вообще, в любой момент. Эту возможность обеспечивает директива break .

Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:

Директива break в строке (*) , если посетитель ничего не ввёл, полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на alert .

Вообще, сочетание «бесконечный цикл + break» – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале-конце цикла, а посередине.

Следующая итерация: continue

Директива continue прекращает выполнение текущей итерации цикла.

Она – в некотором роде «младшая сестра» директивы break : прерывает не весь цикл, а только текущее выполнение его тела, как будто оно закончилось.

Её используют, если понятно, что на текущем повторе цикла делать больше нечего.

Например, цикл ниже использует continue , чтобы не выводить чётные значения:

Для чётных i срабатывает continue , выполнение тела прекращается и управление передаётся на следующий проход for .

Цикл, который обрабатывает только нечётные значения, мог бы выглядеть так:

С технической точки зрения он полностью идентичен. Действительно, вместо continue можно просто завернуть действия в блок if . Однако, мы получили дополнительный уровень вложенности фигурных скобок. Если код внутри if более длинный, то это ухудшает читаемость, в отличие от варианта с continue .

Обычно мы можем заменить if на оператор вопросительный знак ‘?’ .

В обоих случаях в зависимости от условия выполняется либо a() либо b() .

Но разница состоит в том, что оператор вопросительный знак ‘?’ , использованный во второй записи, возвращает значение.

Синтаксические конструкции, которые не возвращают значений, нельзя использовать в операторе ‘?’ .

К таким относятся большинство конструкций и, в частности, break/continue .

Поэтому такой код приведёт к ошибке:

Впрочем, как уже говорилось ранее, оператор вопросительный знак ‘?’ не стоит использовать таким образом. Это – всего лишь ещё одна причина, почему для проверки условия предпочтителен if .

Метки для break/continue

Бывает нужно выйти одновременно из нескольких уровней цикла.

Например, внутри цикла по i находится цикл по j , и при выполнении некоторого условия мы бы хотели выйти из обоих циклов сразу:

В коде выше для этого использована метка.

Метка имеет вид «имя:» , имя должно быть уникальным. Она ставится перед циклом, вот так:

Можно также выносить её на отдельную строку:

Вызов break outer ищет ближайший внешний цикл с такой меткой и переходит в его конец.

В примере выше это означает, что будет разорван самый внешний цикл и управление перейдёт на alert .

Директива continue также может быть использована с меткой, в этом случае управление перепрыгнет на следующую итерацию цикла с меткой.

Итого

JavaScript поддерживает три вида циклов:

  • while – проверка условия перед каждым выполнением.
  • do..while – проверка условия после каждого выполнения.
  • for – проверка условия перед каждым выполнением, а также дополнительные настройки.

Чтобы организовать бесконечный цикл, используют конструкцию while(true) . При этом он, как и любой другой цикл, может быть прерван директивой break .

Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует – используют директиву continue .

Обе этих директивы поддерживают «метки», которые ставятся перед циклом. Метки – единственный способ для break/continue повлиять на выполнение внешнего цикла.

Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *