Введение: Почему компьютеры такие "умные"?
Привет, юный программист! 👋 Сегодня мы раскроем один из главных секретов программирования. Задумывался ли ты, как компьютер принимает решения? Как игра понимает, что ты нажал на кнопку "Старт", а не "Выход"? Или как робот-пылесос понимает, что перед ним стена, и нужно повернуть?
Всё это работает благодаря двум мощным инструментам: условиям и циклам. Представь, что программа — это рецепт пиццы. Условия — это проверки: "Если сыр закончился, пойди в магазин". Циклы — это повторения: "Меси тесто, пока оно не станет эластичным". Без них рецепт был бы просто списком действий, которые выполняются один раз и без выбора.
Сегодня ты научишься:
- Заставлять программу выбирать (как в игре "камень-ножницы-бумага")
- Заставлять её повторять действия (как робот, который красит забор)
- Писать код, который реагирует на разные ситуации
Поехали! 🚀
Часть 1: Условия — "Если ... то ..."
Что такое условие в жизни?
Каждый день мы принимаем решения. Посмотри на эти примеры:
- Если идёт дождь, то беру зонт
- Если получил пятёрку, то мама радуется
- Если голоден, то иду на кухню
В Java это выглядит так же просто! Конструкция if проверяет условие и выполняет код только если оно истинно (правда).
Первая программа с условием
public class ConditionExample1 {
public static void main(String[] args) {
int temperature = 25; // Температура на улице
// Проверяем: если температура больше 20, то жарко
if (temperature > 20) {
System.out.println("На улице жарко! Идём купаться!");
}
System.out.println("Программа завершена.");
}
}
Результат: На улице жарко! Идём купаться! Программа завершена.
А если температура будет 15? Тогда условие temperature > 20 — ложь, и сообщение не появится. Попробуй изменить значение!
if-else: Два пути
В жизни не всегда всё однозначно. Если дождь — беру зонт, иначе (else) — иду без зонта. В Java для этого есть else:
public class ConditionExample2 {
public static void main(String[] args) {
int age = 15; // Твой возраст
if (age >= 18) {
System.out.println("Ты взрослый! Можешь голосовать.");
} else {
System.out.println("Ты ещё ребёнок. Но программировать можешь уже сейчас!");
}
// Ещё пример: проверка чётности числа
int number = 7;
if (number % 2 == 0) { // % - остаток от деления
System.out.println(number + " - чётное число");
} else {
System.out.println(number + " - нечётное число");
}
}
}
Обрати внимание на % — оператор остатка от деления. Если число делится на 2 без остатка, оно чётное.
else if: Много вариантов
А если вариантов больше двух? Например, оценка в школе: 5 — отлично, 4 — хорошо, 3 — удовлетворительно, 2 — плохо. Тут поможет else if:
public class GradeChecker {
public static void main(String[] args) {
int grade = 4; // Оценка
if (grade == 5) {
System.out.println("Отлично! Ты молодец!");
} else if (grade == 4) {
System.out.println("Хорошо! Но можно и лучше.");
} else if (grade == 3) {
System.out.println("Удовлетворительно. Нужно подтянуть знания.");
} else if (grade == 2) {
System.out.println("Плохо. Садись, два!");
} else {
System.out.println("Такой оценки не бывает!");
}
}
}
Важно: Java проверяет условия по порядку. Как только найдёт истинное, остальные пропускаются.
Логические операторы: И, ИЛИ, НЕ
Иногда нужно проверить несколько условий сразу. Например: "Если на улице солнечно И температура выше 25, идём на пляж". Для этого есть логические операторы:
- && (И) — истина, когда оба условия истинны
- || (ИЛИ) — истина, когда хотя бы одно условие истинно
- ! (НЕ) — меняет истину на ложь и наоборот
public class LogicalOperators {
public static void main(String[] args) {
boolean isSunny = true;
int temperature = 30;
boolean hasUmbrella = false;
// И: солнце И тепло
if (isSunny && temperature > 25) {
System.out.println("Идём на пляж! 🏖️");
}
// ИЛИ: дождь ИЛИ снег
boolean isRainy = false;
boolean isSnowy = true;
if (isRainy || isSnowy) {
System.out.println("Остаёмся дома.");
}
// НЕ: если нет зонта
if (!hasUmbrella) {
System.out.println("Зонт не нужен, но на всякий случай возьми.");
}
// Сложное условие
int age = 16;
boolean withParents = true;
// Можно войти в кино, если возраст >= 18 ИЛИ есть родители
if (age >= 18 || withParents) {
System.out.println("Проходите в кино!");
} else {
System.out.println("Извините, вам нельзя.");
}
}
}
Тернарный оператор: короткая запись
Для простых условий есть короткая запись — тернарный оператор ? :. Это как if-else в одной строке:
public class TernaryExample {
public static void main(String[] args) {
int score = 85;
// Если score >= 60, то "Сдал", иначе "Не сдал"
String result = (score >= 60) ? "Сдал" : "Не сдал";
System.out.println("Результат: " + result);
// Можно даже вкладывать, но не злоупотребляй!
int age = 20;
String status = (age < 13) ? "Ребёнок" :
(age < 18) ? "Подросток" : "Взрослый";
System.out.println("Статус: " + status);
}
}
Часть 2: Циклы — "Повторяй, пока..."
Зачем нужны циклы?
Представь, что тебе нужно написать "Я люблю программировать!" 100 раз. Писать 100 строк кода — скучно и долго. Циклы решают эту проблему. Они позволяют выполнять один и тот же блок кода много раз.
В Java есть три вида циклов:
- while — "пока условие истинно, делай"
- do-while — "сделай хотя бы раз, потом проверяй"
- for — "для каждого значения от ... до ..."
Цикл while: "Проверяй сначала"
Цикл while работает как охранник в клубе: сначала проверяет условие, потом пускает внутрь. Если условие ложно сразу — код не выполнится ни разу.
public class WhileExample {
public static void main(String[] args) {
int count = 1; // Счётчик
// Пока счётчик меньше или равен 5, печатаем сообщение
while (count <= 5) {
System.out.println("Строка номер " + count);
count++; // Увеличиваем счётчик на 1 (count = count + 1)
}
System.out.println("Цикл завершён! count = " + count);
// Пример: обратный отсчёт
int seconds = 10;
System.out.println("Обратный отсчёт:");
while (seconds > 0) {
System.out.println(seconds + "...");
seconds--;
}
System.out.println("ПУСК! 🚀");
}
}
Важно! Если забыть увеличивать счётчик, цикл станет бесконечным. Компьютер зависнет или программа уйдёт в бесконечный цикл. Всегда проверяй, что условие когда-нибудь станет ложным.
Цикл do-while: "Сделай хотя бы раз"
Этот цикл похож на while, но с одним отличием: он сначала выполняет код, а потом проверяет условие. Гарантирует хотя бы одно выполнение. Как зубной врач: сначала смотрит, потом спрашивает "больно?"
public class DoWhileExample {
public static void main(String[] args) {
int number = 100;
do {
System.out.println("Число: " + number);
number++;
} while (number < 5); // Условие ложно, но код выполнился один раз!
System.out.println("После цикла number = " + number);
// Практичный пример: игра "Угадай число"
// Представь, что у нас есть генератор случайных чисел
java.util.Scanner scanner = new java.util.Scanner(System.in);
int secretNumber = 7;
int guess;
do {
System.out.print("Угадай число от 1 до 10: ");
guess = scanner.nextInt();
if (guess < secretNumber) {
System.out.println("Слишком мало!");
} else if (guess > secretNumber) {
System.out.println("Слишком много!");
}
} while (guess != secretNumber);
System.out.println("Поздравляю! Ты угадал!");
}
}
Цикл for: "Для каждого..."
Цикл for — самый популярный. Он компактно объединяет инициализацию, условие и изменение счётчика в одной строке. Идеален, когда знаешь точное количество повторений.
public class ForExample {
public static void main(String[] args) {
// Структура: for (начало; условие; шаг) { тело }
// Выведем числа от 1 до 10
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
System.out.println(); // Переход на новую строку
// Обратный порядок: от 10 до 1
for (int i = 10; i >= 1; i--) {
System.out.print(i + " ");
}
System.out.println();
// Чётные числа от 2 до 20
for (int i = 2; i <= 20; i += 2) {
System.out.print(i + " ");
}
System.out.println();
// Таблица умножения на 3
System.out.println("Таблица умножения на 3:");
for (int i = 1; i <= 10; i++) {
System.out.println("3 × " + i + " = " + (3 * i));
}
}
}
Вложенные циклы: "Цикл в цикле"
Иногда нужно выполнить цикл внутри другого цикла. Например, нарисовать прямоугольник из звёздочек или таблицу умножения.
public class NestedLoops {
public static void main(String[] args) {
// Рисуем прямоугольник 5×7 из звёздочек
System.out.println("Прямоугольник 5×7:");
for (int row = 1; row <= 5; row++) { // Внешний цикл - строки
for (int col = 1; col <= 7; col++) { // Внутренний - столбцы
System.out.print("* ");
}
System.out.println(); // Переход на новую строку
}
// Таблица умножения от 1 до 5
System.out.println("\nТаблица умножения:");
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print((i * j) + "\t"); // \t - табуляция
}
System.out.println();
}
// Треугольник из звёздочек
System.out.println("\nТреугольник:");
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
Управление циклами: break и continue
Иногда нужно прервать цикл досрочно (break) или пропустить итерацию (continue).
public class BreakContinue {
public static void main(String[] args) {
// break: прерывает цикл полностью
System.out.println("Поиск числа 7:");
for (int i = 1; i <= 10; i++) {
if (i == 7) {
System.out.println("Нашли число 7! Останавливаемся.");
break; // Выходим из цикла
}
System.out.println("Проверяем: " + i);
}
// continue: пропускает текущую итерацию
System.out.println("\nЧисла от 1 до 10, кроме 5:");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // Пропускаем 5
}
System.out.print(i + " ");
}
System.out.println();
// Пример: выводим только чётные числа
System.out.println("\nЧётные числа от 1 до 10:");
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) { // Если нечётное
continue; // Пропускаем
}
System.out.print(i + " ");
}
}
}
Часть 3: Комбинируем условия и циклы
Теперь самое интересное! Условия и циклы работают вместе, как шестерёнки в часах. Вот несколько примеров:
Пример 1: Поиск делителей числа
public class FindDivisors {
public static void main(String[] args) {
int number = 28;
System.out.print("Делители числа " + number + ": ");
for (int i = 1; i <= number; i++) {
if (number % i == 0) { // Если i делит number без остатка
System.out.print(i + " ");
}
}
System.out.println();
// Проверка на простое число
number = 17;
boolean isPrime = true;
if (number < 2) {
isPrime = false;
} else {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
isPrime = false;
break; // Нашли делитель - число не простое
}
}
}
if (isPrime) {
System.out.println(number + " - простое число");
} else {
System.out.println(number + " - составное число");
}
}
}
Пример 2: Игра "Угадай число" с подсказками
import java.util.Scanner;
public class GuessGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int secretNumber = 42; // Загаданное число
int guess;
int attempts = 0;
System.out.println("Я загадал число от 1 до 100. Угадай его!");
while (true) { // Бесконечный цикл, пока не угадаем
System.out.print("Твой вариант: ");
guess = scanner.nextInt();
attempts++;
if (guess < secretNumber) {
System.out.println("Слишком мало! Попробуй ещё.");
} else if (guess > secretNumber) {
System.out.println("Слишком много! Попробуй ещё.");
} else {
System.out.println("Поздравляю! Ты угадал с " + attempts + " попытки!");
break; // Выходим из цикла
}
// Подсказка после 5 попыток
if (attempts == 5) {
System.out.println("Подсказка: число двузначное.");
}
}
scanner.close();
}
}
Пример 3: Вывод чисел Фибоначчи
public class Fibonacci {
public static void main(String[] args) {
int n = 10; // Сколько чисел вывести
int first = 0;
int second = 1;
System.out.println("Первые " + n + " чисел Фибоначчи:");
for (int i = 1; i <= n; i++) {
System.out.print(first + " ");
// Вычисляем следующее число
int next = first + second;
first = second;
second = next;
}
System.out.println();
// Альтернатива с while
System.out.println("\nЕщё раз, но через while:");
first = 0;
second = 1;
int count = 0;
while (count < n) {
System.out.print(first + " ");
int next = first + second;
first = second;
second = next;
count++;
}
}
}
Практические задания
Теперь твоя очередь! Попробуй решить эти задачи. Не бойся ошибаться — ошибки помогают учиться.
Задание 1: Калькулятор оценок
Напиши программу, которая:
- Спрашивает у пользователя его оценку (число от 1 до 5)
- Выводит текстовое описание:
- 5 — "Отлично! Ты гений!"
- 4 — "Хорошо, но можно лучше"
- 3 — "Удовлетворительно, старайся"
- 2 — "Плохо, нужно заниматься"
- 1 — "Ужасно! Срочно за учебники!"
- Любое другое число — "Некорректная оценка"
- Используй
if-else if-else
Задание 2: Таблица умножения для любого числа
Напиши программу, которая:
- Спрашивает у пользователя число
- Выводит таблицу умножения для этого числа от 1 до 10
- Используй цикл
for - Пример: пользователь вводит 7, программа выводит:
7 × 1 = 7 7 × 2 = 14 7 × 3 = 21 ... 7 × 10 = 70
Задание 3: Угадай число (сложный уровень)
Напиши программу, которая:
- Загадывает случайное число от 1 до 50 (используй
int secret = (int)(Math.random() * 50) + 1;) - Даёт пользователю 7 попыток угадать
- После каждой попытки говорит "больше" или "меньше"
- Если пользователь угадал — поздравляет и показывает количество попыток
- Если попытки закончились — показывает загаданное число
- Используй цикл с условием и
break
Подсказка для задания 3:
int secret = (int)(Math.random() * 50) + 1;
int maxAttempts = 7;
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
// твой код
}
Удачи! 🎉 Помни: программирование — это как спорт. Чем больше тренируешься, тем лучше получается!