Как получить логический пользовательский ввод с помощью сканера?

Поэтому я должен спросить пользователя, старше ли он 18 лет, и он должен ответить, правда или ложь. И продолжайте цикл, пока они не введут правильный ввод

Пока что у меня это

boolean b = false;
do {
    try {
        System.out.print("Are you above 18?");
        Scanner n = new Scanner(System.in);
        boolean bn = s.nextBoolean();

        if (bn == true) {
            // do stuff
        } else if (bn == false) {
            // do stuff
        }

    } catch (InputMismatchException e) {
        System.out.println("Invalid input!");
    }
} while (!b);

ОДНАКО, это не сработает, так как цикл продолжается, и он не будет правильно читать ввод и выполнять мои операторы if. Как это исправить? Спасибо!


person tash517    schedule 15.05.2014    source источник
comment
В этом случае я выберу вариант y/n.   -  person M-WaJeEh    schedule 15.05.2014
comment
bn == true является избыточным. bn оценивается как логическое значение.   -  person Sotirios Delimanolis    schedule 15.05.2014
comment
Вы устанавливаете для своей переменной b значение true внутри одного из ваших условий? Ваш цикл не остановится, пока b не станет true и на него не будет ссылки в вашем цикле. Вы хотели сделать, пока (!bn)?.   -  person Kon    schedule 15.05.2014
comment
Просто не по теме, замените if(bn == true) на if(bn).   -  person M-WaJeEh    schedule 15.05.2014
comment
Какие входные значения вы пробовали?   -  person Code-Apprentice    schedule 15.05.2014


Ответы (4)


небольшие изменения в вашей программе. Это работает

boolean b = false;
        do {
            try {
                System.out.print("Are you above 18?");
                Scanner n = new Scanner(System.in);
                boolean bn = n.nextBoolean();
                if (bn == true) {
                    System.out.println("Over 18");
                } else if (bn == false) {
                    System.out.println("under 18");
                }

            } catch (InputMismatchException e) {
                System.out.println("Invalid input!");
            }
        } while (!b);

И результат

Are you above 18?true
Over 18
Are you above 18?false
under 18
Are you above 18?
person vkg    schedule 15.05.2014
comment
Только что отформатировал. Отступов было мало. :) Не уверен, что это был ваш вопрос? - person vkg; 15.05.2014

Вам необходимо перепроверить оператор Scanner и оператор Initializing...

Scanner n = new Scanner(System.in);
boolean bn = s.nextBoolean();

Это должно быть

Scanner n = new Scanner(System.in);
boolean bn = n.nextBoolean();  
person Rajat.r2    schedule 13.06.2017

Попробуйте изменить

boolean bn = s.nextBoolean();

to

b = s.nextBoolean();
person Code-Apprentice    schedule 15.05.2014

Использовать-

сканер.nextBoolean()

    do{
      try{
          System.out.print("Are you above 18?");
          Scanner scanner = new Scanner(System.in);
          if(scanner.nextBoolean()==true)
           //do stuff

          }else{

          //do stuff
          }
       }
person Hello World    schedule 15.05.2014