☕ Java

Арифметические операции — Java

Что это и зачем?

Представь, что ты кассир в магазине сладостей. У тебя есть коробка с 10 шоколадками, и пришёл покупатель, который хочет купить 3. Сколько останется? А если завтра привезут ещё 5 коробок по 10 шоколадок — сколько всего будет? Чтобы это посчитать, не обязательно пересчитывать каждую конфету пальцем. Достаточно выполнить арифметические операции — сложение, вычитание, умножение и деление.

В Java эти операции выглядят почти так же, как в математике, только вместо знака умножения «×» мы пишем *, а вместо знака деления «÷» — /. Компьютер — это тот же кассир, только очень быстрый и никогда не ошибающийся (если ты не ошибёшься в команде).

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

В Java есть 5 основных арифметических операций:

  • + — сложение (как в математике)
  • - — вычитание
  • * — умножение
  • / — деление (только в Java есть хитрость с целыми числами)
  • % — остаток от деления (это новое! Он показывает, сколько осталось, если поделить нацело)

Давай сразу договоримся: в Java, как и в Python, есть типы данных. Для чисел чаще всего используют int (целые числа, например 5, -3, 100) и double (дробные числа, например 3.14, -0.5). Если ты смешаешь их в одной операции — Java сама разберётся, но иногда это приводит к неожиданным результатам (мы это обсудим в ошибках).

В отличие от Python, где можно просто написать print(2 + 3) и всё заработает, в Java нужно сначала создать класс и метод main. Не пугайся — это просто «контейнер» для твоей программы. Все примеры ниже будут внутри такого контейнера.

Примеры кода с объяснением

Пример 1: Сложение и вычитание (как в жизни)

Представь, что у тебя было 15 рублей, ты нашёл ещё 7, а потом потратил 10 на мороженое. Сколько осталось?

public class Main {
    public static void main(String[] args) {
        // Объявляем переменные — это как коробочки с наклейками
        int bylo = 15;          // Было 15 рублей
        int nashel = 7;         // Нашёл 7 рублей
        int potratil = 10;      // Потратил 10 рублей

        // Считаем: было + нашёл - потратил
        int ostalos = bylo + nashel - potratil;

        // Выводим результат на экран
        // В Java для вывода используем System.out.println()
        System.out.println("У тебя осталось: " + ostalos + " рублей");
        // На экране появится: У тебя осталось: 12 рублей
    }
}

Как это работает: Java выполняет действия слева направо, как в математике. Сначала 15 + 7 = 22, потом 22 - 10 = 12. Результат сохраняется в переменную ostalos. Знак + в System.out.println используется для склеивания текста и чисел — это называется конкатенация. В Python для этого используют запятые или f-строки, а в Java — знак плюс.

Пример 2: Умножение (считаем площадь комнаты)

Ты решил узнать, сколько квадратных метров в твоей комнате. Длина — 6 метров, ширина — 4 метра.

public class Main {
    public static void main(String[] args) {
        int dlina = 6;
        int shirina = 4;

        // Умножение: площадь = длина * ширина
        int ploshad = dlina * shirina;

        System.out.println("Площадь комнаты: " + ploshad + " кв. м");
        // Вывод: Площадь комнаты: 24 кв. м

        // А теперь посчитаем периметр: (длина + ширина) * 2
        int perimetr = (dlina + shirina) * 2;
        System.out.println("Периметр комнаты: " + perimetr + " м");
        // Вывод: Периметр комнаты: 20 м
    }
}

Обрати внимание на скобки! В Java, как и в математике, сначала выполняются действия в скобках. Если бы мы написали dlina + shirina * 2, то сначала умножилось бы 4 на 2 (получилось 8), а потом прибавилось 6 — итог 14, а не 20. Скобки меняют порядок!

В Python скобки работают точно так же — это общее правило для всех языков программирования.

Пример 3: Деление и остаток (делим пиццу)

У тебя есть 23 кусочка пиццы, и 5 друзей. Сколько кусочков достанется каждому, если делить поровну? Сколько останется тебе?

public class Main {
    public static void main(String[] args) {
        int kuskov = 23;
        int druzei = 5;

        // Целочисленное деление: 23 / 5 = 4 (остаток 3)
        // Java отбрасывает дробную часть, если оба числа целые!
        int kazhdomu = kuskov / druzei;
        System.out.println("Каждому другу: " + kazhdomu + " кусочков");
        // Вывод: Каждому другу: 4 кусочка

        // Остаток от деления: 23 % 5 = 3
        int ostatok = kuskov % druzei;
        System.out.println("Останется тебе: " + ostatok + " кусочка");
        // Вывод: Останется тебе: 3 кусочка

        // Проверка: 4 * 5 + 3 = 23 — всё верно!
    }
}

Важный момент: В Java, если ты делишь целое число на целое, результат тоже будет целым — дробная часть просто отбрасывается (не округляется, а отбрасывается!). 23 / 5 = 4, а не 4.6. Если нужно получить дробный результат, хотя бы одно число должно быть дробным (например, 23.0 / 5 или 23 / 5.0). В Python 3 деление целых чисел даёт дробный результат по умолчанию, а для целочисленного деления используют //. В Java такого оператора нет — нужно явно указывать тип.

Оператор % (остаток от деления) — очень полезная штука. Он часто используется, чтобы проверить, делится ли число на другое без остатка (например, чётное ли число: число % 2 == 0).

Пример 4: Работа с дробными числами (double)

Теперь представим, что ты хочешь поделить пиццу точнее — вдруг кто-то хочет полкусочка? Используем дробные числа.

public class Main {
    public static void main(String[] args) {
        double kuskov = 23.0;  // Обрати внимание на точку!
        double druzei = 5.0;

        // Теперь деление даст дробный результат
        double kazhdomu = kuskov / druzei;
        System.out.println("Каждому другу: " + kazhdomu + " кусочка");
        // Вывод: Каждому другу: 4.6 кусочка

        // Можно смешивать int и double — Java сама приведёт к double
        int a = 10;
        double b = 3.0;
        double resultat = a / b;  // 10 / 3.0 = 3.333...
        System.out.println("10 / 3 = " + resultat);
        // Вывод: 10 / 3 = 3.3333333333333335
    }
}

Почему в конце 3.3333333333333335, а не просто 3.333? Потому что компьютеры не могут хранить бесконечные дроби точно — это особенность двоичной системы счисления. В Python будет то же самое. Для обычных задач такая точность подходит, но для финансовых расчётов используют специальные типы данных.

Обрати внимание: дробные числа записываются через точку, а не через запятую! 3.14 — правильно, 3,14 — ошибка.

Пример 5: Сложное выражение (средняя оценка)

Ты получил оценки за четверть: 5, 4, 3, 5, 4. Нужно посчитать среднее арифметическое.

public class Main {
    public static void main(String[] args) {
        int ocenka1 = 5;
        int ocenka2 = 4;
        int ocenka3 = 3;
        int ocenka4 = 5;
        int ocenka5 = 4;

        // Считаем сумму всех оценок
        int summa = ocenka1 + ocenka2 + ocenka3 + ocenka4 + ocenka5;
        // summa = 21

        // Чтобы получить среднее, делим сумму на количество оценок
        // Но если оба числа int, мы потеряем дробную часть!
        // Поэтому используем double для деления:
        double srednee = (double) summa / 5;  // Преобразуем summa в double

        System.out.println("Средняя оценка: " + srednee);
        // Вывод: Средняя оценка: 4.2

        // Если бы мы написали summa / 5, то получили бы 4 (отбросили 0.2)
        int nepravilno = summa / 5;
        System.out.println("Неправильное среднее: " + nepravilno);
        // Вывод: Неправильное среднее: 4
    }
}

Здесь мы использовали приведение типов — (double) summa говорит Java: «Возьми переменную summa (которая int) и временно считай её дробным числом». Это как если бы ты сказал: «У меня 5 яблок, но для расчёта представим, что это 5.0 яблок». Без этого деление дало бы 4, а не 4.2.

В Python приведение типов тоже есть, но оно происходит автоматически, когда ты делишь целое на целое — ты получаешь дробь. В Java нужно быть внимательным!

Типичные ошибки

Давай разберём ошибки, которые чаще всего делают новички в Java (и не только). Я покажу неправильный код и объясню, почему он не работает.

Ошибка 1: Забыли точку с запятой

public class Main {
    public static void main(String[] args) {
        int a = 5
        int b = 3
        System.out.println(a + b)
    }
}

Ошибка: После каждой команды в Java обязательно ставится точка с запятой ;. Компилятор выдаст ошибку: ';' expected. В Python точки с запятой не нужны, но в Java это обязательно.

Исправление: int a = 5; int b = 3; System.out.println(a + b);

Ошибка 2: Деление целых чисел без учёта дробной части

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;
        double result = a / b;  // Думаешь, что будет 3.333?
        System.out.println(result);  // На самом деле 3.0!
    }
}

Почему? Сначала выполняется деление a / b как целых чисел — получается 3. Потом это 3 преобразуется в double (3.0). Результат — 3.0, а не 3.333. В Python такого не случится, но в Java нужно быть внимательным.

Исправление: double result = (double) a / b; или double result = a / 3.0;

Ошибка 3: Деление на ноль

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        int result = a / b;  // Ошибка!
        System.out.println(result);
    }
}

Ошибка: На ноль делить нельзя! Java выбросит исключение ArithmeticException и программа остановится. В Python будет то же самое (ZeroDivisionError). Это математическое правило: делить на ноль нельзя ни в одной программе.

Исправление: Всегда проверяй, что делитель не равен нулю: if (b != 0) { ... }

Ошибка 4: Путаница между = и ==

public class Main {
    public static void main(String[] args) {
        int a = 5;
        if (a = 10) {  // Ошибка! Должно быть a == 10
            System.out.println("a равно 10");
        }
    }
}

Почему? Один знак = — это присваивание (положить значение в переменную). Два знака == — это сравнение (проверить, равны ли значения). В Python то же самое правило. Java выдаст ошибку компиляции, потому что if ожидает логическое выражение, а присваивание возвращает число.

Исправление: if (a == 10)

Ошибка 5: Забыли, что приоритет операций существует

public class Main {
    public static void main(String[] args) {
        int result = 5 + 3 * 2;  // Думаешь, что будет 16?
        System.out.println(result);  // На самом деле 11!
    }
}

Почему? В Java умножение и деление выполняются раньше сложения и вычитания (как в математике). Сначала 3 * 2 = 6, потом 5 + 6 = 11. Если хочешь сначала сложить — используй скобки: (5 + 3) * 2 = 16.

Ошибка 6: Неправильное имя