Bagaimana cara mendapatkan input pengguna boolean menggunakan pemindai?

Jadi saya harus bertanya kepada pengguna apakah mereka berusia di atas 18 tahun dan mereka harus menjawab dengan benar atau salah. Dan terus perulangan sampai mereka memasukkan input yang benar

Sejauh ini, saya punya ini

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);

NAMUN, ini tidak akan berfungsi karena loop terus berjalan dan tidak akan membaca input dengan benar dan melakukan pernyataan if saya. Bagaimana cara memperbaikinya? Terima kasih!


person tash517    schedule 15.05.2014    source sumber
comment
Saya akan memilih opsi y/n dalam kasus ini.   -  person M-WaJeEh    schedule 15.05.2014
comment
bn == true mubazir. bn mengevaluasi ke nilai boolean.   -  person Sotirios Delimanolis    schedule 15.05.2014
comment
Apakah Anda menyetel variabel b ke true di dalam salah satu kondisi Anda? Perulangan Anda tidak akan berhenti sampai b menjadi true dan tidak menjadi referensi di mana pun dalam perulangan Anda. Apakah yang Anda maksudkan lakukan saat (!bn)?.   -  person Kon    schedule 15.05.2014
comment
Keluar dari topik, ganti if(bn == true) Anda dengan if(bn).   -  person M-WaJeEh    schedule 15.05.2014
comment
Nilai masukan apa yang sudah Anda coba?   -  person Code-Apprentice    schedule 15.05.2014


Jawaban (4)


sedikit perubahan pada program Anda. Ini berhasil

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);

Dan hasilnya adalah

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
Baru saja memformatnya. Lekukannya sedikit meleset. :) Tidak yakin apakah itu pertanyaan Anda? - person vkg; 15.05.2014

Anda perlu memeriksa ulang pernyataan Pemindai dan pernyataan Inisialisasi...

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

Seharusnya begitu

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

Coba ubah

boolean bn = s.nextBoolean();

to

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

Menggunakan-

pemindai.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