Java-console Vraag om ENTER-invoer voordat u verder gaat

Ik ben een eenvoudig verhaal aan het maken, waarbij de gebruiker af en toe wordt gevraagd op ENTER te drukken. Het werkt de eerste keer dat ik erom vraag, maar daarna voert het onmiddellijk de andere prompts uit, misschien omdat het programma zo snel draait tegen de tijd dat je de ENTER-toets omhoog laat, het al de controle op de prompts heeft uitgevoerd.

Enig idee? Code hieronder.

   System.out.println("...*You wake up*...");
    System.out.println("You are in class... you must have fallen asleep.");
    System.out.println("But where is everybody?\n");
    promptEnterKey();
    System.out.println("You look around and see writing on the chalkboard that says CBT 162");
    promptEnterKey();
//////////////////////////////////////////////////////
public void promptEnterKey(){
    System.out.println("Press \"ENTER\" to continue...");
    try {
        System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Antwoord 1, autoriteit 100%

De reden waarom System.in.readde tweede keer niet blokkeert, is dat wanneer de gebruiker de eerste keer op ENTER drukt, er twee bytes worden opgeslagen die overeenkomen met \ren \n.

Gebruik in plaats daarvan een Scanner-instantie:

public void promptEnterKey(){
   System.out.println("Press \"ENTER\" to continue...");
   Scanner scanner = new Scanner(System.in);
   scanner.nextLine();
}

Antwoord 2, autoriteit 24%

Als we vasthouden aan uw benadering van het gebruik van System.in, is het goed om de bytes te definiëren die u wilt lezen, uw promptEnterKey wijzigen in dit:

  public static void promptEnterKey(){
        System.out.println("Press \"ENTER\" to continue...");
        try {
            int read = System.in.read(new byte[2]);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

het zal werken zoals je nodig hebt.
Maar, zoals de anderen zeiden, kun je verschillende benaderingen proberen zoals de Scannerklasse, die keuze is aan jou.

Other episodes