| section | 03 |
|---|---|
| name | Операторы и выражения |
| type | practice |
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".
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.
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.
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)необязательны, но делают код нагляднее.
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;дают одинаковый результат.
❌ Неправильно (не скомпилируется в условии 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.
На основе примеров выше попробуй:
- Напиши выражение, которое проверяет, делится ли число на 3 и на 5 одновременно (используй
%и&&). - Перепиши
if/elseдля нахождения минимума двух чисел через тернарный оператор. - Предскажи результат:
int i = 3; int j = i++ + ++i;— затем проверь в коде и объясни каждый шаг.