Бесконечные циклы (причины и решения)

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

Тренажер по Java

Одна из частых ошибок начинающих программистов — бесконечные циклы. Это ситуация, когда условие выхода из цикла никогда не становится истинным, и программа зависает или завершается с ошибкой переполнения памяти.

В этом уроке мы разберем причины возникновения таких ситуаций: забытое обновление счетчика, неправильное условие (например, i > 0, когда i растет) или намеренное использование while(true) без break. Вы научитесь визуально находить проблемы в коде, использовать интерактивные примеры для отладки и понимать, как работает код в критических ситуациях.

Список тем

1. Конечный или бесконечный

id: 40455_java_inf_01_sort

Перед вами четыре фрагмента кода с циклами на Java. Ваша задача — определить, является ли каждый цикл бесконечным или он завершится корректно. Перетащите каждый элемент в соответствующую категорию: 'Завершится корректно' или 'Бесконечный цикл'. Обратите внимание, что бесконечный цикл возникает, когда условие выхода никогда не выполняется или отсутствует, тогда как завершающийся цикл имеет чёткое условие, которое в определённый момент становится ложным.

Перетяните элементы в соответствующие блоки
Бесконечный цикл
Завершится корректно
while (true) {
    System.out.println("Running");
}
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
int j = 0;
while (j < 3) {
    j++;
    System.out.println(j);
}
for (;;) {
    System.out.println("Infinite");
}
Сообщения
Проверить
Показать подсказку

2. Забытый инкремент

id: 40455_java_inf_02_error

В этом фрагменте кода Java используется цикл while для вывода чисел от 1 до 5, но в теле цикла отсутствует изменение переменной-счётчика, что приводит к бесконечному выполнению. Найдите строку, в которой необходимо добавить инкремент переменной, чтобы цикл завершился после пяти итераций.

Найдите ошибку и исправьте
public class Main {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println("i = " + i);
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Исправление условия

id: 40455_java_inf_03_replace

В данном фрагменте кода цикл for должен выводить числа от 0 до 9. Однако из-за неверного оператора сравнения в условии цикл не выполняется. Замените оператор сравнения на корректный, чтобы цикл выполнился ровно 10 раз и вывел все числа от 0 до 9. Вставьте правильный оператор в отмеченное место.

Заполните пропуски
// Выведите числа от 0 до 9
for (int i = 0; i input1S 10; i++) {
    System.out.println(i);
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Причина зацикливания

id: 40455_java_inf_04_click

Перед вами фрагмент кода на Java, содержащий цикл while. Внимательно изучите условие цикла и операцию изменения переменной-счётчика. Ваша задача — найти и выделить кликом ту часть выражения в условии цикла, которая всегда остаётся истинной (true) и приводит к бесконечному выполнению цикла. Не отмечайте другие части кода, такие как объявление переменной, тело цикла или оператор инкремента.

Кликните по всем фрагментам, которые подходят под условие задания.
int i = 0;
while ({{i >= 0~|~t1}}) {
    System.out.println("Итерация: " + i);
    {{i++~|~t2}};
}
Сообщения
Проверить
Показать подсказку

5. Хитрый цикл

id: 40455_java_inf_05_predict

Проанализируйте приведённый код на Java. Цикл do-while выглядит бесконечным, но внутри есть условие выхода с помощью break. Определите, какое число будет выведено на экран после выполнения программы.

Выберите правильный вариант ответа
class Main {
    public static void main(String[] args) {
        int i = 0;
        do {
            i += 2;
            if (i >= 5) {
                break;
            }
        } while (true);
        System.out.println(i);
    }
}
Сообщения
Проверить
Показать подсказку

6. Безопасный цикл

id: 40455_java_inf_06_build

Из предложенных строк соберите корректную Java-программу, которая использует цикл while для чтения ввода с консоли и гарантированно завершается при вводе слова 'exit'. Программа должна корректно обрабатывать ввод и прерывать цикл при вводе 'exit'. Некоторые строки лишние и не должны входить в решение.

Перетяните в правильном порядке строки из одного блока в другой
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String input = scanner.nextLine();
            if (input.equals("exit")) {
                break;
            }
        }
        scanner.close();
    }
}
            continue;
        while (!input.equals("exit")) {
            if (input == "exit") {
            System.out.println(input);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру