Поток управления в Java: условные операторы и циклы

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы погрузитесь в мир управляющих структур языка Java. Это важные инструменты, которые позволяют вашим программам принимать решения и повторять действия. Мы рассмотрим три основных концепции:

  1. Условные операторы if-else для принятия решений
  2. Циклы for для повторения действий определенное количество раз
  3. Циклы while для повторения действий, когда вы не знаете, сколько раз вам нужно будет повторить их

Не беспокойтесь, если эти термины звучат незнакомо - мы подробно объясним каждый из них. К концу этого практического занятия вы сможете писать программы на Java, которые могут принимать решения и повторять действия, открывая для себя совершенно новый мир возможностей в вашем пути изучения программирования!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/variables("Variables") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/while_loop("While Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") subgraph Lab Skills java/variables -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} java/if_else -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} java/for_loop -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} java/while_loop -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} java/output -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} java/user_input -.-> lab-413751{{"Поток управления в Java: условные операторы и циклы"}} end

Понимание условных операторов if-else

Представьте, что вы создаете программу, которая дает советы по погоде. Вы хотите, чтобы она давала разные рекомендации в зависимости от температуры. Именно здесь на помощь приходят условные операторы if-else!

  1. Откройте файл WeatherAdvisor.java в WebIDE. Вы увидите следующий код:

    public class WeatherAdvisor {
        public static void main(String[] args) {
            int temperature = 28; // Temperature in Celsius
    
            System.out.println("The temperature is " + temperature + "°C.");
    
            // TODO: Add if-else statements here to provide weather advice
        }
    }

    Вот разбор этого кода:

    1. public class WeatherAdvisor:

      • Эта строка объявляет публичный класс с именем WeatherAdvisor.
      • В Java каждая программа должна иметь как минимум один класс, и имя класса должно совпадать с именем файла (в данном случае WeatherAdvisor.java).
    2. public static void main(String[] args):

      • Это главный метод, который является точкой входа в любую программу на Java.
      • public: Этот метод может быть доступен извне класса.
      • static: Этот метод принадлежит самому классу, а не какому-либо конкретному экземпляру класса.
      • void: Этот метод не возвращает никакого значения.
      • main: Это имя метода. Java ищет метод с именем "main" для начала выполнения программы.
      • (String[] args): Это позволяет методу принимать аргументы командной строки (хотя в этом примере мы их не используем).
    3. int temperature = 28;:

      • Эта строка объявляет целочисленную переменную с именем temperature и инициализирует ее значением 28.
      • int - это тип данных для целых чисел в Java.
      • Комментарий // Temperature in Celsius объясняет, что это значение представляет собой температуру в градусах Цельсия.
    4. System.out.println("The temperature is " + temperature + "°C.");:

      • Эта строка выводит сообщение в консоль.
      • System.out.println() - это метод, который выводит текст и переходит на новую строку.
      • Оператор + здесь используется для конкатенации строк, объединяя текст со значением переменной temperature.
      • Символ °C в конце добавляет обозначение градусов Цельсия к выводу.

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

  2. Замените комментарий TODO следующим кодом:

    if (temperature > 30) {
        System.out.println("It's a hot day. Remember to stay hydrated!");
    } else if (temperature > 20) {
        System.out.println("It's a nice warm day. Enjoy the weather!");
    } else if (temperature > 10) {
        System.out.println("It's a bit cool. You might need a light jacket.");
    } else {
        System.out.println("It's cold. Wear warm clothes!");
    }
Пример кода с if-else

Разберем это:

  • Условный оператор if проверяет, превышает ли температура 30°C.
  • Если нет, программа переходит к первому оператору else if и проверяет, превышает ли температура 20°C.
  • Это продолжается до тех пор, пока не будет найдено истинное условие или пока не будет достигнут оператор else в конце.
  • Только один из этих блоков кода будет выполнен - как только условие становится истинным, Java пропускает все остальные.
  1. Сохраните файл. В большинстве интегрированных сред разработки (IDE), включая WebIDE, вы можете сохранить файл, нажав Ctrl+S (или Cmd+S на Mac).

  2. Теперь скомпилируем программу. В терминале внизу WebIDE введите:

    javac ~/project/WeatherAdvisor.java

    Эта команда сообщает Java скомпилировать ваш код. Если вы не видите никакого вывода, это хорошо! Это означает, что ошибок не было.

  3. Чтобы запустить программу, введите:

    java -cp ~/project WeatherAdvisor

    Часть -cp ~/project сообщает Java, где найти скомпилированный код.

  4. Вы должны увидеть следующий вывод:

    The temperature is 28°C.
    It's a nice warm day. Enjoy the weather!

    Это соответствует нашему коду, так как 28°C превышает 20°C, но не превышает 30°C.

  5. Давайте поэкспериментируем! Измените значение переменной temperature в коде на 35, затем сохраните, скомпилируйте и запустите программу снова. Вы должны увидеть:

    The temperature is 35°C.
    It's a hot day. Remember to stay hydrated!
  6. Попробуйте изменить температуру на 15 и 5, каждый раз компилируя и запуская программу. Посмотрите, как меняется вывод!

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

Работа с циклами for

Теперь давайте узнаем о циклах for. Они очень полезны, когда вы хотите повторить какое - то действие определенное количество раз, например, создать таблицу умножения!

  1. Откройте файл MultiplicationTable.java в WebIDE. Вы увидите следующий код:

    public class MultiplicationTable {
        public static void main(String[] args) {
            int number = 5;
            System.out.println("Multiplication table for " + number + ":");
    
            // TODO: Add a for loop here to print the multiplication table
        }
    }
  2. Замените комментарий TODO следующим циклом for:

    for (int i = 1; i <= 10; i++) {
        int result = number * i;
        System.out.println(number + " x " + i + " = " + result);
    }

    Разберем этот код:

    • for (int i = 1; i <= 10; i++) - это оператор цикла for:
      • int i = 1 создает переменную i и присваивает ей значение 1. Это происходит один раз в начале цикла.
      • i <= 10 - это условие. Цикл продолжает выполняться, пока это условие истинно.
      • i++ увеличивает значение переменной i на 1 каждый раз, когда цикл завершает итерацию.
    • Внутри цикла мы умножаем number на i и выводим результат.
    • Этот цикл повторится 10 раз, при этом значение i будет изменяться от 1 до 10.
  3. Сохраните файл.

  4. Скомпилируйте программу:

    javac ~/project/MultiplicationTable.java
  5. Запустите программу:

    java -cp ~/project MultiplicationTable
  6. Вы должны увидеть таблицу умножения на 5:

    Multiplication table for 5:
    5 x 1 = 5
    5 x 2 = 10
    5 x 3 = 15
    5 x 4 = 20
    5 x 5 = 25
    5 x 6 = 30
    5 x 7 = 35
    5 x 8 = 40
    5 x 9 = 45
    5 x 10 = 50

    Видим, как программа вывела таблицу от 1 до 10? Вот как работает наш цикл for!

  7. Давайте поэкспериментируем! Измените значение переменной number на 7, затем сохраните файл, скомпилируйте и запустите программу снова. Вы должны увидеть таблицу умножения на 7.

  8. Хотите увидеть больше? Попробуйте изменить i <= 10 на i <= 15 в цикле for. Это сделает так, чтобы таблица умножения была до 15, а не до 10.

Циклы for невероятно полезны, когда вы точно знаете, сколько раз хотите повторить какое - то действие. Вы будете часто использовать их в вашем программировании!

Исследование циклов while

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

  1. Откройте файл GuessTheNumber.java в WebIDE. Вы увидите следующий код:

    import java.util.Random;
    import java.util.Scanner;
    
    public class GuessTheNumber {
        public static void main(String[] args) {
            Random random = new Random();
            int numberToGuess = random.nextInt(100) + 1; // Random number between 1 and 100
            Scanner scanner = new Scanner(System.in);
            int guess;
            int attempts = 0;
    
            System.out.println("I'm thinking of a number between 1 and 100. Can you guess it?");
    
            // TODO: Add a while loop here to implement the guessing game
    
            scanner.close();
        }
    }

    Этот код создает случайное число, которое игрок должен угадать, и сканер для чтения ввода игрока.

  2. Замените комментарий TODO следующим циклом while:

    while (true) {
        System.out.print("Enter your guess: ");
        guess = scanner.nextInt();
        attempts++;
    
        if (guess < numberToGuess) {
            System.out.println("Too low! Try again.");
        } else if (guess > numberToGuess) {
            System.out.println("Too high! Try again.");
        } else {
            System.out.println("Congratulations! You guessed the number in " + attempts + " attempts.");
            break;
        }
    }

    Разберем этот код:

    • while (true) создает бесконечный цикл. Он будет выполняться до тех пор, пока мы не скажем ему остановиться.
    • Внутри цикла мы запрашиваем у игрока вариант ответа и увеличиваем счетчик попыток.
    • Мы используем условные операторы if - else, чтобы проверить, является ли вариант ответа слишком низким, слишком высоким или правильным.
    • Если вариант ответа правильный, мы выводим сообщение с поздравлением и используем оператор break, чтобы выйти из цикла.
  3. Сохраните файл.

  4. Скомпилируйте программу:

    javac ~/project/GuessTheNumber.java
  5. Запустите программу:

    java -cp ~/project GuessTheNumber
Вывод программы GuessTheNumber
  1. Теперь сыграйте в игру! Постоянно вводите числа, пока не угадаете правильное. Программа сообщит, если ваше число слишком большое или слишком маленькое.

Этот цикл while продолжает выполняться до тех пор, пока не будет угадано правильное число. Мы не знаем, сколько попыток потребуется, поэтому цикл while здесь идеален.

Комбинирование управляющих структур

В качестве нашей финальной задачи мы объединим условные операторы if - else, циклы for и циклы while для создания программы, которая находит простые числа!

  1. Откройте файл PrimeNumberFinder.java в WebIDE. Вы увидите следующий код:

    import java.util.Scanner;
    
    public class PrimeNumberFinder {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int count = 0;
            int number = 2;
    
            System.out.print("How many prime numbers do you want to find? ");
            int maxPrimes = scanner.nextInt();
    
            System.out.println("First " + maxPrimes + " prime numbers:");
    
            // TODO: Implement the prime number finding logic here
    
            scanner.close();
        }
    }
  2. Замените комментарий TODO следующим кодом:

    while (count < maxPrimes) {
        boolean isPrime = true;
    
        for (int i = 2; i <= Math.sqrt(number); i++) {
            if (number % i == 0) {
                isPrime = false;
                break;
            }
        }
    
        if (isPrime) {
            System.out.print(number + " ");
            count++;
        }
    
        number++;
    }

    Это может показаться сложным, но давайте разберем его:

    • Мы используем цикл while, чтобы продолжать поиск простых чисел до тех пор, пока не найдем нужное количество.
    • Для каждого числа мы используем цикл for, чтобы проверить, является ли оно простым.
    • Мы используем Math.sqrt(number) в качестве оптимизации - нам нужно проверять только до квадратного корня из числа.
    • Если мы находим делитель, мы знаем, что число не является простым, поэтому мы устанавливаем isPrime в false и прерываем внутренний цикл.
    • Если isPrime по-прежнему равно true после выполнения цикла for, мы выводим число и увеличиваем счетчик.
    • Мы всегда увеличиваем number в конце, чтобы перейти к следующему числу.
  3. Сохраните файл.

  4. Скомпилируйте программу:

    javac ~/project/PrimeNumberFinder.java
  5. Запустите программу:

    java -cp ~/project PrimeNumberFinder
  6. Когда программа запросит ввод, введите число (например, 10), чтобы найти столько простых чисел. Вы должны увидеть такой вывод:

    How many prime numbers do you want to find? 10
    First 10 prime numbers:
    2 3 5 7 11 13 17 19 23 29

Эта программа показывает, насколько мощным может быть Java, когда вы комбинируете разные управляющие структуры. Теперь вы можете создавать программы, которые могут принимать решения, повторять действия и решать сложные задачи!

Итоги

Отличная работа! В этом практическом занятии вы освоили некоторые из наиболее важных концепций программирования на Java:

  1. Условные операторы if - else: Вы использовали их для принятия решений в программе - советчике по погоде.
  2. Циклы for: Вы использовали их для создания таблицы умножения, повторяя действие определенное количество раз.
  3. Циклы while: Вы использовали их в игре "Угадай число", повторяя действие до тех пор, пока не было выполнено определенное условие.
  4. Комбинирование управляющих структур: Вы объединили все эти концепции для создания программы, которая находит простые числа.

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

Помните, что практика делает мастером. Попробуйте изменить эти программы или создать новые, используя эти концепции. Можете ли вы создать программу, которая дает разные советы для каждого дня недели? Или программу, которая выводит таблицу умножения для любого числа до 100? Возможности безграничны!

Продолжайте писать код, продолжайте учиться, и, что самое главное, наслаждайтесь процессом! Вы уже на хорошем пути к становлению экспертом в Java.