Skip to content

Latest commit

 

History

History
147 lines (119 loc) · 7.05 KB

File metadata and controls

147 lines (119 loc) · 7.05 KB
section 03
name Операторы и выражения
type practice

03. Операторы и выражения — Практика

Пример 1: Базовые арифметические операции

public class Arithmetic {
    public static void main(String[] args) {
        int a = 17, b = 5;
        System.out.println("a + b = " + (a + b));   // 22
        System.out.println("a - b = " + (a - b));   // 12
        System.out.println("a * b = " + (a * b));   // 85
        System.out.println("a / b = " + (a / b));   // 3 (целочисленное!)
        System.out.println("a % b = " + (a % b));   // 2 (остаток)
    }
}

Разбор кода:

  • a / b при int-операндах даёт int: 17 / 5 = 3, дробная часть отбрасывается.
  • a % b возвращает остаток: 17 = 5 * 3 + 2, поэтому результат 2.
  • Скобки вокруг (a + b) нужны, чтобы Java сначала вычислила сумму, а потом конкатенировала со строкой. Без скобок "a + b = " + a + b дало бы "a + b = 175".

Пример 2: Логические выражения и их результат

public class LogicalOps {
    public static void main(String[] args) {
        int x = 10;
        System.out.println(x > 5 && x < 20);    // true
        System.out.println(x < 5 || x > 8);     // true
        System.out.println(!(x == 10));           // false
        System.out.println(x >= 10 && x <= 10);  // true (x == 10)
    }
}

Разбор кода:

  • x > 5 && x < 20: оба условия выполнены, результат true.
  • x < 5 || x > 8: первое условие false, но второе true — результат true. Благодаря короткому замыканию, если бы первое было true, второе не вычислялось бы.
  • !(x == 10): x == 10 даёт true, оператор ! инвертирует — результат false.
  • x >= 10 && x <= 10 — это способ проверить, что x равен ровно 10.

Пример 3: Составные операторы присваивания

public class CompoundAssignment {
    public static void main(String[] args) {
        int n = 10;
        n += 5;  System.out.println("n += 5: " + n);   // 15
        n -= 3;  System.out.println("n -= 3: " + n);   // 12
        n *= 2;  System.out.println("n *= 2: " + n);   // 24
        n /= 4;  System.out.println("n /= 4: " + n);   // 6
        n %= 4;  System.out.println("n %= 4: " + n);   // 2
    }
}

Разбор кода:

  • Каждый составной оператор — сокращённая запись: n += 5 означает n = n + 5.
  • Операции выполняются последовательно, каждая следующая работает с уже изменённым значением n.
  • n %= 4 при n = 6: 6 % 4 = 2, потому что 6 = 4 * 1 + 2.

Пример 4: Тернарный оператор — максимум двух чисел

public class TernaryMax {
    public static void main(String[] args) {
        int a = 15, b = 23;
        int max = (a > b) ? a : b;
        System.out.println("Максимум: " + max); // 23

        // Вложенный тернарный: знак числа
        int num = -7;
        String sign = (num > 0) ? "положительное" : (num < 0) ? "отрицательное" : "ноль";
        System.out.println(num + " — " + sign);  // -7 — отрицательное
    }
}

Разбор кода:

  • (a > b) ? a : b — если a > b, возвращается a, иначе b. При a=15, b=23 условие false, поэтому max = 23.
  • Вложенный тернарный: сначала проверяется num > 0. Если false, вычисляется второй тернарный (num < 0) ? "отрицательное" : "ноль".
  • Скобки вокруг условия (a > b) необязательны, но делают код нагляднее.

Пример 5: Префиксный vs постфиксный инкремент

public class IncrementDemo {
    public static void main(String[] args) {
        int a = 5;
        int b = a++;  // b = 5, затем a становится 6
        System.out.println("a = " + a + ", b = " + b); // a=6, b=5

        int c = 5;
        int d = ++c;  // c становится 6, затем d = 6
        System.out.println("c = " + c + ", d = " + d); // c=6, d=6
    }
}

Разбор кода:

  • b = a++: Java сначала читает текущее значение a (5) и присваивает его b, затем увеличивает a до 6. Итог: b=5, a=6.
  • d = ++c: Java сначала увеличивает c до 6, затем читает новое значение и присваивает его d. Итог: d=6, c=6.
  • Разница важна только тогда, когда ++ используется внутри выражения. В отдельной строке a++; и ++a; дают одинаковый результат.

Пример 6: ❌ Неправильно / ✅ Правильно — = вместо ==

Неправильно (не скомпилируется в условии if):

int x = 5;
// if (x = 10) { ... }  // ошибка компиляции: int нельзя использовать как boolean

Правильно:

public class CompareCorrect {
    public static void main(String[] args) {
        int x = 5;
        if (x == 10) {
            System.out.println("x равен 10");
        } else {
            System.out.println("x не равен 10"); // выведет это
        }
    }
}

Объяснение: = — оператор присваивания, он записывает значение в переменную и возвращает это значение. В условии if Java ожидает boolean, а x = 10 возвращает int — отсюда ошибка компиляции. Оператор == сравнивает два значения и возвращает boolean.

Попробуй сам

На основе примеров выше попробуй:

  1. Напиши выражение, которое проверяет, делится ли число на 3 и на 5 одновременно (используй % и &&).
  2. Перепиши if/else для нахождения минимума двух чисел через тернарный оператор.
  3. Предскажи результат: int i = 3; int j = i++ + ++i; — затем проверь в коде и объясни каждый шаг.

← Теория | Оглавление | Задания →