Посмотрите внимательно на выражение 2 + 2 * 2 и посчитайте в уме ответ. Правильный ответ: 6. Если у вас получилось 8, то этот урок для вас.
В школьной математике мы изучали понятие «приоритет операции». Приоритет определяет, в какой последовательности должны выполняться операции.
Например, умножение и деление имеют больший приоритет, чем сложение и вычитание:
2 + 3 * 2 = 8
Но нередко вычисления должны происходить в порядке, отличном от стандартного приоритета. В сложных ситуациях приоритет можно задавать круглыми скобками, точно так же, как в школе, например:
(2 + 2) * 2
Скобки можно ставить вокруг любой операции. Они могут вкладываться друг в друга сколько угодно раз. Вот пара примеров:
System.out.println(3 * (4 - 2)); // => 6
System.out.println(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14
Иногда выражение сложно воспринимать визуально. Тогда можно сделать его понятнее, расставив скобки, хотя они и не повлияют на приоритет:
Было:
System.out.println(8 / 2 + 5 - -4 / 2); // => 11
Стало:
System.out.println(((8 / 2) + 5) - (-4 / 2)); // => 11
Запомните: код пишется для людей, потому что код будут читать люди, а машины будут только исполнять его. Для машин нет «более» понятного или «менее» понятного кода, независимо от того, является ли код корректным или нет.
https://replit.com/@hexlet/java-basics-arithmetics
Дано выражение 70 * 3 + 4 / 8 + 2
.
Расставьте скобки так, чтобы оба сложения (3 + 4
и 8 + 2
) высчитывались в первую очередь. Выведите результат на экран.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1import java.io.ByteArrayOutputStream;
2import java.io.FileDescriptor;
3import java.io.FileOutputStream;
4import java.io.PrintStream;
5
6import static org.assertj.core.api.Assertions.assertThat;
7
8class Test {
9 public static void main(String[] args) {
10 final var expected = "49";
11
12 ByteArrayOutputStream out = new ByteArrayOutputStream();
13 System.setOut(new PrintStream(out));
14
15 App.main(null);
16
17 final var actual = out.toString().trim();
18
19 System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
20 System.out.println(actual);
21
22 assertThat(actual).isEqualTo(expected);
23 }
24}
25
Решение учителя откроется через: