Dan
Dan

Reputation: 8513

Java Scanner hasNext() doesn't return false

I am trying to read input continuously from the user until the user types quit. I am testing it by just typing 'quit' but console.hasNext() doesn't seem to be returning false. In fact it seems that the program is blocked on line 7(hasNext() line). Any ideas?

    boolean bool = true;
    while (bool) {
        System.out.println("Type 'quit':");
        Scanner console = new Scanner(System.in);
        if (console.next().equals("quit")) {
            System.out.println("You typed quit");
            System.out.println("check: " + console.hasNext()); // This line doesnt print
            bool = false;
        }
    }

Upvotes: 3

Views: 5575

Answers (1)

user1131435
user1131435

Reputation:

If your Scanner is declared as System.in, it will be asking System.in if there is a next value to be received. The in class will then wait for the user to input something, then return true.

Reserve hasNext() for things like files, where the input size is fixed. That way, when Scanner queries the file, it has a definite hasNext().

Instead, I suggest grabbing the next value as a String, then checking if it matches the integer format. If it does, then convert it, otherwise, handle it however you'd like.

Upvotes: 14

Related Questions