Задачку решил методом псевдонаучного тыка и это конечно меня не удовлетворило.
Объясните пожалуйста работу этих строчек:
boolean conditionFirst = number < 15 & number > 25 & (number += 15) < 25;
boolean conditionSecond = (number | 5) > 12 || (number = number + 2) > 40;
Голова кипит, вообще не вкуриваю что в них происходит.
Дмитрий Б.
29 уровень
Как это работает?
Архивный
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений Семененко
7 февраля 2022, 17:57
Пользуюсь в таких случаях прекрасным функционалом debug)
Но за вопрос спасибо ТС
0
Вероника Григорович
23 апреля 2021, 10:42
Спасибо за вопрос. Теперь хоть понятно стало
0
михаил
21 февраля 2021, 06:22
boolean это всегда "ложь" или "правда", у нее нет третьего состояния.
Вот у тебя и присваивается значению слева от равно её состояние.
Если справа от равно "правда" то значение true, если "ложь" то false.
0
Дмитрий Б.
21 февраля 2021, 12:02
ну что у булевой переменной либо true либо false я вкурсе.
я не понимаю выражения
number < 15 & number > 25 & (number += 15) < 25;
я правильно понимаю что тут 3 выражения?
number < 15
number > 25
(number += 15) < 25
+2
михаил
21 февраля 2021, 12:26
Да. Это математика:
Если значение number меньше 15 И
Если значение number больше 25 И
Если мы к number прибавим 15 и это будет меньше 25
то выражение будет true. То есть каждое условие должно быть "правдой".
Когда стоит || это означает "или", когда хотя бы одно из условий "правда" тогда и всё "правда"
0
Дмитрий Б.
21 февраля 2021, 13:42
ну ок, number у нас 15.
т.е. у нас перво условие всегда false.
ну получили мы
boolean conditionFirst = false;
вторая булева
boolean conditionSecond = (number | 5) > 12 || (number = number + 2) > 40;
т.е. 15|5>12 true и дальше выражения не выполняются.
почему number в итоге меняется на 30?
+4
Ksenia Volkova Java Developer в DXC Master
21 февраля 2021, 13:47решение
В boolean conditionFirst стоит & - значит, все части условия будут проверены. Включая (number += 15) < 25.
+5
михаил
21 февраля 2021, 14:38решение
boolean conditionFirst = number < 15 & number > 25 & (number += 15) < 25;
так как все условия проверяются то обязательно дойдет до (number += 15), а это значит к number = number +15, т.е. к твоему 15 добавляем 15 и number теперь равен 30.
и в памяти теперь значение number = 30.
+39
Дмитрий Б.
22 февраля 2021, 00:33
Т.е. как итог получаем следуюшее:
conditionFirst = false;
number = 30; // изменилось в 3-ем выражении первой булевой
conditionSecond = true;
и еслиб логический оператор во втором был не || а |,то number опять бы изменился на 32.
Уффф, наконец-то мозг начал воспринимать эти строчки.
наверно меня смущали первые два выражения в первой булевой и где-то на подмознательном мое внутреннее я кричало "Убери это! Беги глупец!" ^_^
Спасибо большое.
+20
Ivan Voronich
14 апреля 2021, 19:11
Спасибо, парень, благодаря твоему вопросу я также понял, что к чему в этой задаче. Решил тоже методом случайного тыка.
+14
Галина
11 августа 2021, 16:59
спасибо за объяснение, очень помогло лучше понять. Что ещё мне не понятно, так это почему в conditionFirst в конце 30 < 25 получилось? И почему в консоль выводится только conditionFirst? Извините, за корявую постановку вопроса
0
Сергей Скворцов
24 августа 2021, 18:48
не могу понять, почему number увеличенное до 30 так и осталось после присвоения conditionFirst значения false? тоесть если написать number +15, то выражение будет работать только в пределах conditionFirst?
+1
Katik
18 декабря 2021, 17:55
Оно и не получилось. conditionFirst = false, но значение number поменялось на 30. А так как 30 < 40, то выводим 30
+2