Вложенный оператор if с застрявшим циклом While

Код предназначен для вопроса с множественным выбором. Если ответ неверен, пользователь должен попробовать, пока не найдет правильный ответ. Когда ответ правильный, проблем нет, но если он неправильный, он зависает и продолжает говорить: «Ваш ответ неверен!». Что я должен делать?

import java.util.*;

public class Question {

    public static void main(String[] args) {
  
        System.out.println();
        System.out.println("Question 1");
        System.out.println();
        System.out.println("What is 2+2?");
        System.out.println("A. 2");
        System.out.println("B. 4");
        System.out.println("C. 6");
        System.out.println("D. 8");

        Scanner input = new Scanner(System.in);
        char getAnswerFromUser = input.next().charAt(0);
        char answer = 'B';

        boolean isAnswerTrue = false;

     
        while(!isAnswerTrue) {
            if (getAnswerFromUser == answer ) {
                System.out.println("Your answer is correct!");
                    isAnswerTrue = true;
            } else{
                System.out.println("Your answer is incorrect!");
                isAnswerTrue = false;
            }       
        }
    }   
}

Вы читаете getAnswerFromUser перед своим циклом и не обновляете его внутри своего цикла.

khelwood 18.03.2022 15:34

Если ответ неверный, вам просто нужно позволить пользователю ввести новый ответ и назначить его getAnswerFromUser внутри цикла.

OH GOD SPIDERS 18.03.2022 15:34

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

Ralf Kleberhoff 18.03.2022 15:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме