วิธีรับอินพุตผู้ใช้บูลีนโดยใช้สแกนเนอร์

ดังนั้นฉันจึงต้องถามผู้ใช้ว่าพวกเขาอายุเกิน 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

ใช้-

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