Hoe u JAVA wilt laten wachten op gebruikersinvoer

Ik probeer een IRC-bot voor mijn kanaal te maken. Ik zou graag willen dat de bot opdrachten van de console kan nemen. In een poging om de hoofdlus te laten wachten tot de gebruiker iets invoert dat ik de lus heb toegevoegd:

while(!userInput.hasNext());

Dit leek niet te werken. Ik heb gehoord van bufferedreader, maar ik heb het nooit gebruikt en weet het niet zeker of dit mijn probleem zou kunnen oplossen.

while(true) {
        System.out.println("Ready for a new command sir.");
        Scanner userInput = new Scanner(System.in);
        while(!userInput.hasNext());
        String input = "";
        if (userInput.hasNext()) input = userInput.nextLine();
        System.out.println("input is '" + input + "'");
        if (!input.equals("")) {
            //main code
        }
        userInput.close();
        Thread.sleep(1000);
    }

Antwoord 1, Autoriteit 100%

Het is niet nodig om u te controleren op beschikbare invoer Wacht en slapen totdat er is sinds Scanner.nextLine()blokkeert totdat een regel beschikbaar is.

Bekijk dit voorbeeld dat ik schreef om het te demonstreren:

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            while (true) {
                System.out.println("Please input a line");
                long then = System.currentTimeMillis();
                String line = scanner.nextLine();
                long now = System.currentTimeMillis();
                System.out.printf("Waited %.3fs for user input%n", (now - then) / 1000d);
                System.out.printf("User input was: %s%n", line);
            }
        } catch(IllegalStateException | NoSuchElementException e) {
            // System.in has been closed
            System.out.println("System.in was closed; exiting");
        }
    }
}

Voer een regel in
hallo
Wachtte 1.892s op gebruikersinvoer
Gebruikersinvoer was: hallo
Voer een regel in
^D
System.in is gesloten; afsluiten

Dus alles wat u hoeft te doen is Scanner.nextLine()te gebruiken en uw app wacht totdat de gebruiker een nieuwe regel heeft ingevoerd. U wilt uw scanner ook niet binnen de lus definiëren en sluiten, aangezien u hem in de volgende iteratie opnieuw gaat gebruiken:

Scanner userInput = new Scanner(System.in);
while(true) {
        System.out.println("Ready for a new command sir.");
        String input = userInput.nextLine();
        System.out.println("input is '" + input + "'");
        if (!input.isEmpty()) {
            // Handle input
        }
    }
}

Other episodes