Elementor Header #8

56. Условия внутри тела цикла

1. Введение

Циклы в Java (for, while, do-while) позволяют выполнять блок кода многократно. Условия внутри тела цикла помогают управлять выполнением кода в зависимости от текущих значений или состояний. Эти условия позволяют добавлять логику в цикл, например, для фильтрации данных, проверки условий или изменения поведения в зависимости от результата проверки.

2. Основные подходы

2.1 Цикл for с условием

Цикл for позволяет выполнять блок кода для каждого элемента в заданном диапазоне, и условия внутри этого блока могут изменять поведение кода.

Пример:

				
					public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                System.out.println(i + " — четное число");
            } else {
                System.out.println(i + " — нечетное число");
            }
        }
    }
}

				
			

Как это работает:

  • Цикл for итерирует от 0 до 9.
  • Условие if проверяет, четное ли текущее число, и выводит соответствующее сообщение.

2.2 Цикл while с условием

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

Пример:

				
					public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i < 10) {
            if (i % 3 == 0) {
                System.out.println(i + " делится на 3");
            }
            i++;
        }
    }
}

				
			

Как это работает:

  • Цикл while продолжает выполняться, пока значение i меньше 10.
  • Условие if проверяет, делится ли текущее значение на 3, и выводит сообщение, если это так.

2.3 Цикл do-while с условием

Цикл do-while выполняет блок кода хотя бы один раз и продолжает выполнение, пока условие истинно. Условия внутри тела цикла могут использоваться для дополнительной проверки и обработки.

Пример:

				
					public class Main {
    public static void main(String[] args) {
        int i = 0;
        do {
            if (i % 5 == 0 && i != 0) {
                System.out.println(i + " делится на 5");
            }
            i++;
        } while (i < 15);
    }
}

				
			

Как это работает:

  • Цикл do-while выполняется, пока значение i меньше 15.
  • Условие if проверяет, делится ли текущее значение на 5, и выводит сообщение, если это так.

3. Примеры использования условий внутри циклов

3.1 Фильтрация данных

Можно использовать условия внутри цикла для фильтрации элементов на основе определенных критериев.

Пример:

				
					public class Main {
    public static void main(String[] args) {
        int[] numbers = {12, 45, 78, 23, 56, 89, 34};

        for (int num : numbers) {
            if (num > 50) {
                System.out.println(num + " больше 50");
            }
        }
    }
}

				
			

Как это работает:

  • Цикл for-each проходит по массиву numbers.
  • Условие if проверяет, больше ли текущее число 50, и если да, выводит это число.

3.2 Поиск элемента

Условия внутри цикла могут использоваться для поиска конкретного элемента в массиве или коллекции.

Пример:

				
					public class Main {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Charlie", "Diana"};

        String searchName = "Charlie";
        boolean found = false;

        for (String name : names) {
            if (name.equals(searchName)) {
                found = true;
                break;
            }
        }

        if (found) {
            System.out.println(searchName + " найдено в массиве.");
        } else {
            System.out.println(searchName + " не найдено в массиве.");
        }
    }
}

				
			

Как это работает:

  • Цикл for-each проходит по массиву names.
  • Условие if проверяет, совпадает ли текущий элемент с искомым именем.
  • Если имя найдено, устанавливается флаг found в true и цикл прерывается.

4. Эффективность использования условий внутри циклов

4.1 Оптимизация условий

При использовании условий внутри циклов важно избегать сложных вычислений или операций, которые могут замедлить выполнение кода.

Пример неэффективного подхода:

				
					public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        for (int num : numbers) {
            if (isPrime(num)) {
                System.out.println(num + " — простое число");
            }
        }
    }

    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i = 2; i < num; i++) {
            if (num % i == 0) return false;
        }
        return true;
    }
}

				
			

Оптимизированный пример:

				
					public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        for (int num : numbers) {
            if (isPrime(num)) {
                System.out.println(num + " — простое число");
            }
        }
    }

    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        if (num == 2) return true; // 2 является простым числом
        if (num % 2 == 0) return false; // исключаем четные числа
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            if (num % i == 0) return false;
        }
        return true;
    }
}

				
			

Как это работает:

  • Оптимизированный метод isPrime() включает проверки для исключения четных чисел и проверки до квадратного корня числа, что повышает эффективность.

5. Распространённые ошибки при использовании условий внутри циклов

5.1 Ошибка: Лишнее выполнение

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

Пример ошибки:

				
					public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                System.out.println("Четное: " + i);
                // Лишнее выполнение
                if (i > 5) {
                    System.out.println("i больше 5");
                }
            }
        }
    }
}

				
			

Исправление:

				
					public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0 && i > 5) {
                System.out.println("Четное число больше 5: " + i);
            }
        }
    }
}

				
			

5.2 Ошибка: Неправильное использование логических операторов

Убедитесь, что условия комбинируются правильно, чтобы избежать логических ошибок.

Пример ошибки:

				
					public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0 || i % 3 == 0) {
                System.out.println(i + " делится на 2 или 3");
            }
        }
    }
}

				
			

Исправление:

				
					public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0 && i % 3 == 0) {
                System.out.println(i + " делится и на 2, и на 3");
            }
        }
    }
}

				
			

Заключение

Условия внутри тела цикла позволяют добавлять гибкость и динамическое поведение в ваши циклы. Правильное использование условий может улучшить логику выполнения и повысить эффективность кода. Убедитесь, что вы избегаете распространённых ошибок, и оптимизируйте ваш код для лучшей производительности.

6. Тестовое задание

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

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

				
					public class Main {
    public static void main(String[] args) {
        int[] numbers = {3, 6, 8, 10, 15, 22, 27};
        int count = 0;

        for (int num : numbers) {
            if (num % 2 == 0) {
                count++;
            }
        }

        System.out.println("Количество четных чисел: " + count);
    }
}

				
			

Поиск минимального числа в массиве, исключая определенное значение:

Напишите программу, которая ищет минимальное значение в массиве целых чисел, исключая указанное значение.

				
					public class Main {
    public static void main(String[] args) {
        int[] numbers = {5, 8, 12, 4, 7, 6};
        int exclude = 4;
        int min = Integer.MAX_VALUE;

        for (int num : numbers) {
            if (num != exclude && num < min) {
                min = num;
            }
        }

        System.out.println("Минимальное значение (исключая " + exclude + "): " + min);
    }
}

				
			

Подсчет количества элементов, которые соответствуют определенному условию:

Напишите программу, которая считает количество элементов в массиве строк, которые начинаются с буквы «A».

				
					public class Main {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Anna", "Alex", "Brian"};
        int count = 0;

        for (String name : names) {
            if (name.startsWith("A")) {
                count++;
            }
        }

        System.out.println("Количество имен, начинающихся на 'A': " + count);
    }
}

				
			

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

logo