Хобрук: Ваш путь к мастерству в программировании

Циклы и операции

Мне трудно понять, что это! в этом цикле while. Я знаю, что это инвертирует логическое значение, но как это приводит к выходу из цикла? Если оно ложно, то оно превращает его в истинное, а если оно истинно, то оно превращает его в ложное?

            String userChoice;
            do
            {

                userChoice = select.promptChoice();


            } while ( !select.isValidChoice(action ) );

Ответы:


1

По-английски:

Пока select.isValueChoice(action) возвращает false (!true), делаем userChoice = select.promptChoice();

Причина ! в том, что цикл завершается, когда isValidChoice возвращает true.

25.05.2012
  • Разве тот факт, что это логическое значение, уже не определяет это. Итак, если isValidChoice возвращает false, это недействительно, и если оно возвращает true, это так. Какова цель НЕ? 25.05.2012
  • Использование while подразумевает запрос логического значения, while будет продолжаться только до тех пор, пока это значение равно true. 25.05.2012
  • Здесь НЕ используется для инвертирования возвращенного значения false, чтобы while могло продолжаться до тех пор, пока метод не вернет true (!true == false, поэтому while завершится). 25.05.2012
  • Верно, поэтому, если isValidChoice вернет true, ! превратит его в false, из-за чего цикл никогда не выйдет, это правильно? 25.05.2012
  • Нет, когда true будет возвращено из isValidChoice, оно будет инвертировано и станет false, и цикл ВЫХОДИТ. Он никогда не завершится, если isValidChoice всегда возвращает false, потому что !false равно true. 25.05.2012
  • Теперь я вижу, поэтому причина ! заключается в том, что он завершается при значении true, а не зацикливается на значении true, потому что обычно цикл выполняется, пока оно истинно. Но в этом случае мы хотим, чтобы он вышел на true, поэтому мы отрицаем его, чтобы он превратился в false. 25.05.2012
  • Причина ! так что цикл завершается, когда isValidChoice возвращает true. Правильный. 25.05.2012

  • 2

    Цикл продолжается до тех пор, пока action не станет допустимым выбором.

    Тем не менее, образец кода не показывает никаких изменений в action.

    25.05.2012
  • который обрабатывается методом, он вернет строку в логическое значение, которое проверит, что пользователь сделал правильный выбор, который затем логическое значение вернет true или false. 25.05.2012

  • 3

    Цикл переводится как: если выбор недействителен, снова запросите ввод данных пользователем.

    Цикл завершается, когда выбор действителен, что является отрицанием условия в цикле while (не допустимо).

    25.05.2012
  • Разве тот факт, что это логическое значение, уже не определяет это. Итак, если isValidChoice возвращает false, это недействительно, и если оно возвращает true, это так. Какова цель НЕ? 25.05.2012
  • while означает, что вы повторяете действие, пока условие истинно. Если вы удалите условие, то цикл завершится, когда пользовательский ввод недействителен, и продолжит запрашивать у пользователя ввод, когда пользовательский ввод действителен, что неверно. Вы хотите запрашивать пользователя до тех пор, пока ввод не будет действительным. 25.05.2012

  • 4

    Это означает «нет». В этом случае говорится «НЕ является допустимым выбором», или по-английски «не является допустимым выбором».

    Цикл в этом случае будет продолжать предлагать пользователю до тех пор, пока выбор не станет действительным.

    ! используется, чтобы просто сказать НЕ, в вашем конкретном случае это будет то же самое, что сказать isValidChoice == false, вы должны попытаться думать об этих вещах на простом английском языке, чтобы лучше понять их.

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

    bool happy = true;
    
    if(!happy)
    {
       cry();
    }
    
    else
    {
       smile();
    }
    

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

    РЕДАКТИРОВАТЬ: В любом случае цикл прервется, если результат будет FALSE. ! не меняет значение вашего логического значения напрямую.

    25.05.2012
  • Думаю, теперь я понимаю благодаря вашему образцу. Таким образом, в основном он не меняет логическое значение, он спрашивает, является ли то, что было возвращено, ложным? 25.05.2012
  • Нет, на самом деле это не меняет логическое значение, оно проверяет его противоположность. Но все это зависит от того, как вы формулируете свои логические переменные. Если вы говорите !isDead, это означает, что он жив. Я обычно называю свои логические значения положительными значениями, я бы сказал !isAlive, чтобы означать, что он мертв. Но это только мое мнение, и оно может меняться в зависимости от ваших требований. 25.05.2012
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..