java — Вложенный тернарный оператор

Вопрос задан

Изменён 7 месяцев назад

Просмотрен 6k раз

Прохожу тест-задачу:

С помощью тернарного оператора замените инициализацию переменной b в указанном коде:

int a = 10;
    int b;
    if (a > 0) {
        if (a < 100) {
            b = 1;
        } else {
            b = 0;
        }
    } else {
        b = -1;
    }

По-моему, тут надо использовать вложеный тернарный оператор, я сделал так:

int a = 10;
    int b;
    b = (a > 0) ? ((a < 100) ? b = 1 : b = 0) : b = -1  ;

но тест отвечает, что я не прав. Где я ошибаюсь и почему это так?

  • java
  • тернарный-оператор
2

Да, вложенная тернарная операция. Логически сделал верно. Но допущена синтаксическая ошибка — попытка присвоить значение переменной b внутри тернарной операции.

Правильно должно быть так:

int a = 10;
int b = a > 0 ? a < 100 ? 1 : 0 : -1;

Вложенное выражение a < 100 ? 1 : 0 возвращает значение, которое используется в выражении выше a > 0 ? ВЛОЖЕННОЕ : -1, которое так же возвращает значение, но уже непосредственно в переменную b.

1

точку с запятой нужно убрать, тогда тренажёр съедает задание 🙂 (тоже самое сейчас прохожу)

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Тернарный оператор . Объектно-ориентированное программирование на Java. Платформа Java SE

Представьте, что мы хотим вычислить абсолютное значение числа.

Это число без знака.

Предположим, что abs, является функцией, которая вычисляет абсолютное значение.

Таким образом, abs 3 равна 3, а abs -3 также равно 3.

Давайте определим проблему более формально.

Если условие x больше 0 вычисляется как true, тогда вычисление abs x совпадает с вычислением x.

Если условие x больше 0 вычисляется как false, тогда вычисление abs x – это то же самое, что и вычисление значения минус x.

Теперь мы хотели бы написать выражение, которое вычисляет абсолютное значение.

Мы бы решили проблему, если бы у нас была функция f с тремя аргументами.

Первый аргумент – это условие.

Второй аргумент – это выражение для вычисления в случае true.

И третий аргумент – это выражение для вычисления в случае false.

В Java эта функция существует, называется она тернарный оператор, и имеет определенный синтаксис.

Здесь используется знак вопроса между условием и выражением для случая true и двоеточие между выражением для случая true и выражением для случая false.

В этом примере, если условие истинно, оператор выдает 1.

Если условие ложно, оператор выдает 2.

Основным типом данных в условных выражениях является тип boolean, который имеет два значения: true и false.

Но существуют ли в наших условных выражениях if else только два возможных случая?

Представьте, что вы плохо запрограммировали логическое выражение, тогда это приведет к вычислению, которое не может завершиться.

В этом случае, если вычисление логического выражения не завершается, вся программа не будет завершена.

Поэтому, на самом деле, у нас есть три случая, это true, false и undefined.

В дальнейшем, анализируя сегменты кода, мы также должны учитывать это неопределенное значение.

Для логических выражений это означает, что у нас есть три возможных случая – true, false и undefined.

И это отличается от традиционной математики, где мы обычно имеем только истину и ложь.

Теперь, давайте немного вспомним о возможностях, которые мы видели.

Здесь, слева, у нас есть условное утверждение, где, в зависимости от значения булевой переменной b, мы присваиваем m или n переменной x.

С другой стороны, у нас есть тройной оператор, который позволяет писать логические выражения.

Оба сегмента кода эквивалентны.

Теперь рассмотрим этот пример.

Представьте, что у нас есть булево значение b и что выражение сравнивает b с true.

Это может быть явно упрощено до b, так как если b истинно, b == true, вычисляется как true.

И если b является ложным, b == true, вычисляется как false.

И если b не определено, выражение b == true также не определено.

Так почему бы не написать более простую версию, просто b как условие?

Аналогично вы можете поступить, если мы имеем выражение b == false.

Вы можете выбрать более простую версию, не b.

И еще вы можете написать b как условие, и поменять операторы S1 и S2.

Здесь у нас есть другое выражение.

Давайте проанализируем его.

Здесь, если b не определено, результат не определен.

Если b истинно, результат будет истинным.

И если b является ложным, результат будет ложным.

Мы рассмотрели все возможные значения b и всего выражения

И мы видим, что они имеют одинаковые значения, что они эквивалентны.

Поэтому вместо всего этого выражения мы можем написать только b.

Та же самая ситуация будет с выражением не b.

Теперь, давайте посмотрим выражение b? c: false.

Если b не определено, все выражение не определено.

Если b истинно, результат равен c.

Однако, если b является ложным, результат будет ложным.

Результат будет истина, только если b и с истина, во всех других случаях результат будет ложным.

Это эквивалентно логическому оператору и.

И наоборот, выражение b? true: c эквивалентно логическому оператору или.

Данный текст является ознакомительным фрагментом.

Тернарный оператор в Java — Темы масштабирования

Обзор

Тернарный оператор в Java используется в качестве замены оператора if-then-else. Он моделирует это поведение — Если выражение 1 истинно, переменная = выражение2, иначе переменная = выражение3 . Это единственный оператор в Java, который принимает три аргумента.

Область применения

Цели этой статьи:

  • Помогите понять, как использовать тернарный оператор в Java, на примерах.
  • Объясните, в каких ситуациях целесообразно использовать тернарный оператор в Java, а в каких необходимо его избегать.

Введение в тернарный оператор в Java

Операторы в Java — это символы, которые предписывают компилятору выполнить определенную операцию. Как и другие операторы, такие как арифметический, побитовый, унарный и т. д., тернарный оператор дополняет список операторов, доступных в Java.

  • Если оператора слишком много, код

Мы обычно пишем условные операторы в наших кодах время от времени, так как они играют важную роль в выборе определенного пути рабочего процесса или часто выбирают между несколькими действиями на основе условия.

Тернарный оператор позволяет нам переводить несколько строк кода блока if-else в одну строку. Как разработчик чистого кода, вы всегда можете задаться вопросом, если это однострочный if-else, то он читабелен? Да, он удобочитаем и структурирован лучше, чем блок if-else. Давайте посмотрим, как он действительно делает это с помощью своего синтаксиса.

Синтаксис тернарного оператора в Java

Переменная = условие? Выражение1 : Выражение2

Условие: Представляет условие, записанное в операторе if.

Выражение1: Это выражение будет сохранено в переменной, если условие окажется истинным.

Выражение2: Это выражение будет сохранено в переменной, если условие окажется ложным.

Переменная: В ней хранится значение, возвращаемое любым выражением.

Обсудим это на примере.

Пример тернарного оператора в Java

Вывод:

Приведенный выше фрагмент кода можно значительно сократить до одной строки, используя тернарный оператор в Java:

Вывод:

Почему этот оператор называется «Тернарным»?

Тройное средство, состоящее из трех частей. Название четко оправдывает выполняемую им операцию, так как инструкция разделена на три части: условное выражение и два разных выражения.

Цепные операции или вложенные условия

Цепные операции — это вложенные условия в троичной операции. Мы можем добиться вложенности if-else и в тернарной операции.

Давайте рассмотрим два разных примера с:

1. Базовая цепочка блоков if-else.

2. Вложенная цепочка блоков if-else.

Базовое объединение блоков if-else

Для базового объединения блоков if else рассмотрим пример, в котором у нас есть несколько строчных букв, и если ввод соответствует строчной букве, он должен присвоить соответствующую прописную букву переменной:

Пример:

Вывод:

Приведенный выше фрагмент кода можно эффективно записать следующим образом:

Вывод:

Если вы внимательно посмотрите, мы используем выражение (когда условие ложно) как следующее else if в тернарной операции. Это называется цепной операцией, так как это цепочка условий, интегрированная с ложной частью каждой тернарной операции . Следовательно, создание цепочки тернарных операций.

Вложенная цепочка блоков if-else

Теперь давайте рассмотрим пример вложенной цепочки блоков if else. Давайте рассмотрим пример автомата по продаже напитков, который запрашивает два входа. Первый ввод предназначен для количества, а второй ввод — для напитка, который вы хотите выбрать для того же количества.

В приведенном ниже фрагменте кода вы можете заметить, что код превратился в спагетти-код, поскольку в одном фрагменте кода слишком много путей и направлений, что снижает читабельность кода.

Но повысит ли написание операции троичной цепочки для того же кода чистоту и читабельность?

На самом деле это не так, и здесь мы поймем, когда нам действительно нужно использовать тернарную операцию и где на самом деле имеют смысл блоки «if else»!

Вывод:

Таким образом, приведенный выше фрагмент кода (реализация if-else) определенно содержит как минимум в 5 раз больше строк кода, чем приведенный ниже фрагмент (Тернарная операция). Но читабельна ли тернарная операция? Не потребуется ли какое-то время, чтобы понять, какова основная цель этого кода по сравнению с приведенным выше фрагментом?

Только в подобных случаях троичных операций можно и нужно избегать, так как они могут ухудшить читабельность и качество кода. Если в тернарной операции обнаружится какая-либо ошибка, разработчику будет сложно ее отладить.

Вывод:

Когда использовать тернарный оператор в Java?

  • Что ж, тернарный оператор в Java, безусловно, лучший выбор, когда дело доходит до написания условных операторов, поскольку это сокращенное свойство реализации if else.
  • Но по мере увеличения сложности условий становится трудно реализовать троичную операцию, а если вы напишете ее, то становится относительно сложно ее прочитать, и, следовательно, устранение неполадок в случае какой-либо ошибки в операторе становится сложнее.
  • Кроме того, важно сохранять значение в переменной в тернарной операции, поскольку каждое выражение в операторе возвращает значение. Сохранение его в переменной становится обязательным. Следовательно, когда предполагается, что условный оператор изменяет определенную переменную или должен возвращать определенный тип данных, тернарный оператор должен быть вашей операцией перехода.

Заключение

  • Тернарный оператор в Java представляет собой сокращенную реализацию условных операторов, которая значительно улучшает код читаемость и качество .
  • Тернарный оператор в Java включает три выражения, отсюда и название.
  • Тернарный оператор в Java обрабатывает следующее поведение: если условие истинно, переменная = выражение1, иначе выражение2 в одной строке.
  • Важно понимать, когда использовать тернарный оператор вместо if-else, поскольку if-else также служит своей цели в нескольких сценариях, таких как вложенные условия.

404: Страница не найдена

Страница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы извиняемся за любые неудобства.

Что я могу сделать сейчас?

Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:

Поиск
  • Узнайте последние новости.
  • Наша домашняя страница содержит самую свежую информацию о Java-разработке.
  • Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, TheServerSide.com.
  • Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.

Просмотр по категории

Архитектура приложения

  • 5 заслуживающих внимания проблем разработки программного обеспечения для автомобилей

    Современные автомобили перегружены технологиями, но создание автомобильных приложений не всегда является легкой прогулкой. Вот пять уникальных …

  • Новый сервис AWS нацелен на безопасность данных, появится функция genAI

    Новая услуга облачного провайдера помогает сотрудникам организаций работать более продуктивно, обеспечивая при этом безопасность своей работы. Продавец …

  • Разрушение краеугольных компонентов ООП

    Объектно-ориентированное программирование изменило правила игры для тех, кто работает со сложными программными системами. Но каковы ключевые элементы, которые…

Качество ПО

  • Возможности ChatGPT для тестирования программного обеспечения

    ChatGPT может помочь тестировщикам программного обеспечения писать тесты и планировать покрытие. Как команды могут предвидеть будущие возможности тестирования ИИ…

  • Компании розничной торговли получают показатели DORA ROI благодаря специализированным инструментам

    Показатели DORA и другие показатели инженерной эффективности появляются в надстройках к существующим инструментам DevOps. А вот сторонний…

  • Вопросы и ответы на сертификационный экзамен Scrum master

    Готовы ли вы к сертификационному экзамену Scrum master? Проверьте себя, ответив на эти 10 сложных вопросов и ответов на экзамене Scrum master.

Облачные вычисления

  • HPE делает большие ставки на общедоступное облако для ИИ

    HPE выходит на рынок поставщиков общедоступных облачных сервисов на базе ИИ, но готова ли она? Узнайте больше о предложениях ИИ для HPE GreenLake и . ..

  • Усовершенствование HPE GreenLake, нацеленное на все

    Брайан Томпсон из HPE рассказывает о том, как HPE GreenLake стала синонимом бренда, и смотрит в будущее, а также о том, как …

  • Подходят ли локальные зоны AWS для моего приложения с малой задержкой?

    AWS предлагает своим клиентам несколько вариантов минимизации задержки приложений. Давайте посмотрим, какую роль локальные зоны AWS могут сыграть в …

Безопасность

  • Партнер TSMC взломан бандой вымогателей LockBit

    Кибератака на китайского системного интегратора Kinmax привела к краже собственных данных TSMC, чем LockBit угрожал …

  • ИИ помогает людям ускорить модернизацию приложений и повысить безопасность

    Предприятия рассматривают подходы на основе ИИ, чтобы помочь людям модернизировать и ускорить разработку приложений для рефакторинга …

  • Квишинг на подъеме: как предотвратить фишинг QR-кода

    Многомесячная рекламная кампания продемонстрировала, как киберпреступники используют QR-коды для обмана пользователей.