Условные операторы и циклы в Java (if, switch, for, while). Practical Tasks
Ниже — четырнадцать практических задач по Java на управляющие конструкции: условные операторы if, if-else, if-else-if, оператор switch, циклы while, do-while, for и for-each, а также операторы перехода break, continue, return и метод System.exit(). Задания идут от простой проверки чётности до факториала, поиска элемента в массиве и корректного завершения программы. К большинству задач есть готовое решение на Patreon, а к части — ещё и видеоразбор. Перед выполнением рекомендуем изучить уроки об операторе if, операторе switch, циклах, операторах break и continue, операторе return и методе System.exit().
Чётное или нечётное число
- Передать на вход программы число в качестве аргумента.
- Если оно нечётное, распечатать его.
- Используем оператор if.
- Используйте метод Integer.parseInt() для преобразования из String в int.
Число от 0 до 10
- С помощью класса Scanner ввести целое число.
- Если это число от 0 (включительно) до 10 (не включая 10), вывести на консоль сообщение “Положительное число меньше 10 или ноль”, иначе вывести сообщение “Положительное число больше 10 или отрицательное”.
- Используем оператор if-else.
Частая ошибка
Внимательно определите, попадают ли граничные значения (0 и 10) в диапазон. Ошибка на единицу в условии вида n >= 0 && n < 10 — одна из самых распространённых у начинающих: перепутав < и <=, вы отнесёте число 10 не к той ветке.
Дни недели через if-else-if
- Передать на вход программы число от 1 до 7 в качестве аргумента.
- Если число равно 1, выводим на консоль “Понедельник”, 2 – “Вторник” и так далее. Если 6 или 7 – “Выходной”.
- Используем конструкцию if-else-if.
Смотрите решение задачи в видео.
Дни недели с оператором switch
Переписать задание “Дни недели через if-else-if”, используя оператор switch. Обратите внимание на случай “6 или 7”: в switch его удобно записать двумя метками case, ведущими к одному действию.
Смотрите решение задачи в видео.
Десять строк циклом while
Распечатать 10 строк: “Task1”, “Task2”, …, “Task10”. Используем цикл while.
Смотрите решение задачи в видео.
Числа, кратные 5, циклом do-while
Распечатать все числа от 1 до 100, которые делятся на 5 без остатка. Используем цикл do-while.
Обратите внимание
Тело цикла do-while выполняется минимум один раз — условие проверяется только после первой итерации. Для этой задачи разница с while незаметна, но помните о ней: если бы стартовое число уже превышало 100, do-while всё равно выполнил бы одну проверку числа.
Смотрите решение задачи в видео.
Пять символов циклом for
Распечатать 5 символов в одну строку начиная с ‘h’. Используем цикл for.
Подсказка
Счётчиком цикла for может быть не только int, но и char: for (char c = 'h'; c < 'h' + 5; c++). Символы в Java — целочисленный тип, поэтому к ним применимы арифметика и инкремент.
Смотрите решение задачи в видео.
Гирлянда, часть 2
Переписать гирлянду (Гирлянда, часть 1), добавив следующий функционал:
- С помощью класса Scanner введите число от 1 до 4.
- Если введено число 1 – выполните метод мигания, 2 – проверку первой лампочки, 3 – метод бегущего огня, 4 – вывод состояния гирлянды на консоль.
- Для выбора режима используйте оператор switch.
- Измените метод мигания: метод должен мигнуть гирляндой 10 раз. Используем оператор for.
- Измените метод бегущего огня: метод должен выполнить операцию 10 раз. Используем оператор for.
Факториал циклом for
Реализовать подсчёт факториала, используя цикл for. Пример вычисления факториала:
n! = 1*2*...*n;
0! = 1;
5! = 1*2*3*4*5; Число n задаётся случайным образом — используйте (int) (Math.random() * 6). Оно должно быть в диапазоне от 0 до 5.
Проверь свой код
При написании программ обращайте внимание на рекомендации по оформлению кода.
Сумма массива циклом for-each
- Создайте массив int[] из нескольких чисел, например {2, 4, 6, 8, 10}.
- Посчитайте сумму всех его элементов.
- Используем цикл for-each.
- Выведите результат на консоль.
Поиск элемента в массиве с оператором break
- Создайте массив int[] из нескольких чисел и переменную target — число для поиска.
- Переберите массив циклом for.
- Как только текущий элемент равен target, выведите его индекс и немедленно прекратите цикл оператором break.
- Если после цикла элемент не найден, выведите “Не найдено”.
Нечётные числа от 1 до 20 с оператором continue
- Организуйте цикл for от 1 до 20 включительно.
- Если очередное число чётное, пропустите итерацию оператором continue.
- Остальные (нечётные) числа выведите на консоль.
Проверка числа на простоту с ранним return
- Напишите метод public static boolean isPrime(int n).
- Переберите возможные делители от 2 до n − 1.
- Как только нашёлся делитель, немедленно верните false оператором return, не дожидаясь конца цикла.
- Если ни один делитель не найден, верните true.
- Вызовите метод для нескольких чисел (например, 7, 15, 23) и выведите результат.
Аварийное завершение программы методом System.exit()
- С помощью класса Scanner считайте с консоли целое число.
- Если число отрицательное, выведите сообщение “Ошибка: число не должно быть отрицательным” и немедленно завершите программу, вызвав System.exit(1).
- Если число неотрицательное, выведите его квадрат на консоль.
Часто задаваемые вопросы
Чем цикл while отличается от do-while в Java?
Цикл while проверяет условие до входа в тело: если оно ложно сразу, тело не выполнится ни разу. Цикл do-while проверяет условие после итерации, поэтому его тело гарантированно выполняется хотя бы один раз. do-while удобен для меню и повторного запроса ввода у пользователя.
Когда использовать switch вместо цепочки if-else-if?
switch подходит, когда одна переменная сравнивается с набором конкретных значений (номер дня недели, пункт меню): такой код читается легче и меньше дублирует имя переменной. Цепочка if-else-if нужна, когда условия разнородные — диапазоны, сравнения нескольких переменных, логические выражения.
Что будет, если забыть break в switch?
Выполнение «провалится» в следующий case (fall-through): после совпавшей метки выполняются все последующие ветки до ближайшего break или конца блока. Иногда это используют намеренно — например, чтобы значения 6 и 7 вели к одному действию «Выходной», — но чаще пропущенный break оказывается незаметной ошибкой.
Как получить случайное целое число от 0 до 5 в Java?
Выражением (int) (Math.random() * 6): метод Math.random() возвращает double от 0 (включительно) до 1 (не включая), умножение на 6 даёт диапазон от 0 до 5,999…, а приведение к int отбрасывает дробную часть. Множитель равен 6, а не 5, иначе число 5 никогда не выпадет. Альтернатива — new Random().nextInt(6).
Почему при вычислении факториала может получиться неверный результат?
Факториал растёт очень быстро: уже 13! не помещается в int, а 21! — в long. Переполнение в Java происходит без ошибки — результат просто становится неверным (может оказаться даже отрицательным). Для n до 5, как в задаче, достаточно int; для больших n используйте long или BigInteger.
Comments