Java: Приоритет операций
Посмотрите на выражение 2 + 2 * 2 и посчитайте ответ в уме. Правильный ответ 6. Если получилось 8, этот урок для вас.
System.out.println(2 + 2 * 2); // 6Результат равен 6, а вовсе не 8, из-за приоритета операций. Приоритет определяет, в каком порядке выполняются действия. Умножение и деление идут раньше сложения и вычитания:
Приоритет операций (от высокого к низкому):
* / % умножение, деление, остаток
↓
+ - сложение, вычитаниеПоэтому в примере выше сначала считается 2 * 2, и только потом к результату прибавляется двойка.
Когда рядом стоят операции одного приоритета, они выполняются слева направо:
System.out.println(8 / 2 * 3); // 12, сначала 8 / 2 = 4, затем 4 * 3 = 12Управление порядком действий
Иногда вычисления должны идти не так, как диктует приоритет. Тогда порядок задают круглыми скобками, ровно как в школе:
System.out.println((2 + 2) * 2); // 8Здесь скобки заставляют сначала сложить 2 + 2, а уже потом умножить на двойку.
Скобки можно ставить вокруг любой части выражения и вкладывать друг в друга сколько угодно раз:
System.out.println(3 * (4 - 2)); // 6
System.out.println(7 * 3 + (4 / 2) - (8 + (2 - 1))); // 14Во втором примере сначала считаются скобки. 4 / 2 дает 2, а 8 + (2 - 1) дает 9. Остается 21 + 2 - 9, и в итоге 14.
Запомните одно правило. Всегда закрывайте скобки. Незакрытая скобка приводит к ошибке, и про закрывающую забывают даже опытные программисты.
Пишите скобки сразу парой. Например, вводите
(), а потом заполняете внутреннюю часть. Большинство редакторов кода (в том числе наш) сами добавляют закрывающую скобку, как только вы написали открывающую.
Скобки для читаемости
Иногда выражение работает правильно, но выглядит запутанно. В таких случаях скобки добавляют для наглядности. На результат они не влияют, зато читать становится удобнее.
Было:
System.out.println(8 / 2 + 5 - -4 / 2); // 11Стало:
System.out.println(((8 / 2) + 5) - (-4 / 2)); // 11Код пишут и читают люди, а машина только исполняет его. Для машины нет более или менее понятного кода, ей достаточно, чтобы код был синтаксически правильным. Аккуратное выражение со скобками выручает человека, особенно при работе в команде и при разборе ошибок.
Задание
Дано выражение 70 * 3 + 4 / 8 + 2.
Расставьте скобки так, чтобы оба сложения (3 + 4 и 8 + 2) высчитывались в первую очередь. Выведите результат на экран.
Java: Приоритет операций
Посмотрите на выражение 2 + 2 * 2 и посчитайте ответ в уме. Правильный ответ 6. Если получилось 8, этот урок для вас.
System.out.println(2 + 2 * 2); // 6Результат равен 6, а вовсе не 8, из-за приоритета операций. Приоритет определяет, в каком порядке выполняются действия. Умножение и деление идут раньше сложения и вычитания:
Приоритет операций (от высокого к низкому):
* / % умножение, деление, остаток
↓
+ - сложение, вычитаниеПоэтому в примере выше сначала считается 2 * 2, и только потом к результату прибавляется двойка.
Когда рядом стоят операции одного приоритета, они выполняются слева направо:
System.out.println(8 / 2 * 3); // 12, сначала 8 / 2 = 4, затем 4 * 3 = 12Управление порядком действий
Иногда вычисления должны идти не так, как диктует приоритет. Тогда порядок задают круглыми скобками, ровно как в школе:
System.out.println((2 + 2) * 2); // 8Здесь скобки заставляют сначала сложить 2 + 2, а уже потом умножить на двойку.
Скобки можно ставить вокруг любой части выражения и вкладывать друг в друга сколько угодно раз:
System.out.println(3 * (4 - 2)); // 6
System.out.println(7 * 3 + (4 / 2) - (8 + (2 - 1))); // 14Во втором примере сначала считаются скобки. 4 / 2 дает 2, а 8 + (2 - 1) дает 9. Остается 21 + 2 - 9, и в итоге 14.
Запомните одно правило. Всегда закрывайте скобки. Незакрытая скобка приводит к ошибке, и про закрывающую забывают даже опытные программисты.
Пишите скобки сразу парой. Например, вводите
(), а потом заполняете внутреннюю часть. Большинство редакторов кода (в том числе наш) сами добавляют закрывающую скобку, как только вы написали открывающую.
Скобки для читаемости
Иногда выражение работает правильно, но выглядит запутанно. В таких случаях скобки добавляют для наглядности. На результат они не влияют, зато читать становится удобнее.
Было:
System.out.println(8 / 2 + 5 - -4 / 2); // 11Стало:
System.out.println(((8 / 2) + 5) - (-4 / 2)); // 11Код пишут и читают люди, а машина только исполняет его. Для машины нет более или менее понятного кода, ей достаточно, чтобы код был синтаксически правильным. Аккуратное выражение со скобками выручает человека, особенно при работе в команде и при разборе ошибок.
Задание
Дано выражение 70 * 3 + 4 / 8 + 2.
Расставьте скобки так, чтобы оба сложения (3 + 4 и 8 + 2) высчитывались в первую очередь. Выведите результат на экран.
Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "49";
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.main(null);
final var actual = out.toString().trim();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(actual);
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
