Проходя if-else на глаза в комментариях начали попадаться тернарные операторы. По началу старался выполнять задачи не отклоняясь от тем. По мере изучения лекций - все же освоил тернарный оператор, но когда выполнятеся Одно условие - здесь все довольно просто - создаем типа переменной int/String - то, что собрались выводить и условие, которое сравниваем - допустим
String age = (x > 18) ? "Проходите" : "Вы слишком молоды"; То есть (Условие) ? true : false;
Затем дошел до задач на поиск min/max, где уже откровенно начали меряться письками.
Например задача с 4го уровня - лекция 6 - Максимум четырех чисел.
Так решил я через if-else:
if (a >= b & a >= c & a >= d) System.out.println(a);
else if (b >= a & b >= c & b >= d) System.out.println(b);
else if (c >= a & c >= b & c >= d) System.out.println(c);
else if (d >= a & d >= b & d >= c) System.out.println(d);
А так решил один из учеников 5го уровня JavaRush. Я конечно понимаю, что код максимально не читабелен и не претендую на то, чтобы в будущем так писать - ибо в будущем еще хочу прочитать книгу - чистый код. Но чисто для понимания и тренировки мозгов хочу понять как это работает - ибо Один тернарный оператор я понимаю, а что происходит здесь - уже нет.
И лучше начать объяснение с 2х условий. Можно на примере задачки про возраст или всем известный Индекс массы тела в диапазонах допустим от и до , от и до и от и до. Чтобы 3-4 условия разных по итогду было - ITM думаю самый лучший пример для объяснения как это все работает. Если не сложно, то объясните кто в этом разбирается. А то вдруг придется столкнуться с таким кодом в будущем, а в гугл вбил тернарный оператор - там в основном все упирается в одно условие, а с несколькими мне не попадалось хороших примеров.
System.out.println(a>=b && a>=c && a>=d ? a : b>=a && b>=c && b>=d ? b : c>=a && c>=b && c>=d? c : d );
Так же, чтобы не плодить темы - еще у меня вопрос про конструкторы и методы при объявлении однотипных параметров можно ли как-то их обощать?
После задач про иницилизации и конструкторы, когда в Cat (int age, int weight, int tail) или (int circleX, int circleY, int circleZ) - напрашивается что-то типа общего приведения типа (Int) или <Integer> или что-то такое ибо если вдруг мне надо подать в параметр 10 полей и все они Одного типа int или String или double - в общем одного типа, то разве нельзя как-то упростить жизнь с учетом, что Java топит за облегчение жизни программистов? Допустим у тебя 10 полей в метод надо занести и 5 из них int и 5 String - как-то их обобщил и (Int) age, weigjt, tail, (String) name, color, address) в таком духе?
Kuksh
15 уровень
Тернарный оператор с несколькими условиями
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
9 апреля 2021, 20:56
когда в будущем ты реально столкнешься с таким кодом, ты тогда сможешь прочитать. Или ты думаешь что ты останешься на своем уровне понимания как сейчас навсегда?
+, то что выдают ученики..поверь, в 99% останется только здесь, в реальности такие "перлы" увидеть может и можно, но очень сложно.
Но раз сильно интересно, читая тернарник, держи в голове схему:
условие ? блок кода, если выражение TRUE : блок кода, если выражение FALSE
то есть
то есть
? - THEN
: - ELSE
Давай почитаем, сначала заменим абстрактную тарабарщину:
a -> number1
b -> number2
c -> number3
d -> number4
далее нужно расставить скобки, сначала проще всего выделить строки с условием, чтобы хоть как-то разобраться в этой чехарде.
Получается:
System.out.println((number1 >= number2 && number1 >= number3 && number1 >= number4) ? number1 : (number2 >= number1 && number2 >= number3 && number2 >= number4) ? number2 : (number3 >= number1 && number3 >= number2 && number3 >= number4) ? number3 : number4);
но такая длинная строка не читается никак, давай разобьем, мы уже видим явный паттерн, разбиваем на несколько строк:
+1
Justinian Judge в Mega City One Master
9 апреля 2021, 20:59
уже чуть лучше, уже видно человеческие переменные.
Но можно лучше, вспоминаем то о чем говорили выше,
перед условием ставим IF,
? заменяем на THEN
: заменяем на ELSE
получается:
уже неплохо, но можно еще переносы строк поменять, чтобы красивее было, и вот что вышло:
немного лучще читается, правда :)
и все понятно. Если число1 больше числа 2, больше числа 3, больше числа 4, то вернуть число 1, поскольку оно же больше.
Если это условие не выполняется, выполняется ELSE, значит идем дальше
если число2 больше числа 1, больше числа 2, больше числа 3, значит..
и тд +2
hidden #2322530
8 апреля 2021, 15:54
System.out.println(a>=b && a>=c && a>=d ? a : b>=a && b>=c && b>=d ? b : c>=a && c>=b && c>=d? c : d );
что первое, что второе не очень красиво)
надо декомпозировать задачу, и использовать иначе.
вот так будет красивее, даже на 5м уровне, и будет в духе "чистового кода"
и к слову ещё про тернарный оператор. ты ещё не попался на приведении типов в тернарном операторе) +5