Wie stelle ich sicher, dass der Scanner hasNextInt () nach neuen Eingaben fragt?

Neuer Programmierer hier. Dies ist wahrscheinlich eine sehr grundlegende Frage, die mich aber dennoch überfordert.

Ich versuche, eine Methode zu schreiben, die nur eine Ganzzahleingabe liefert, damit ich diese Eingabe in meinem Hauptprogramm verwenden kann, ohne mit Nicht-Ganzzahleingaben herumspielen zu müssen. Es scheint jedoch problematisch zu sein, die Methode dafür in einer eigenen Methode zu schreiben.

public static int goodInput () {
    Scanner input = new Scanner (System.in); //construct scanner
    boolean test = input.hasNextInt(); //set a sentinel value
    while (test == false) { //enter a loop until I actually get an integer
        System.out.println("Integers only please"); //tell user to give me an integer
        test = input.hasNextInt(); //get new input, see if it's an integer
    }
    int finalInput = input.nextInt(); //once i have an integer, set it to a variable
    input.close(); //closing scanner
    return finalInput; //return my integer so I don't have to mess around with hasNextInt over there
}

Dies scheint in mehrere Ebenen unterteilt zu sein, aber ich bin mir nicht sicher warum.

Wenn ich bei der ersten Eingabeaufforderung einen ganzzahligen Wert wie 0 oder 1 eingebe, sollte die Schleife vollständig übersprungen werden. Stattdessen tritt es in die Schleife ein und gibt "Nur ganze Zahlen, bitte" aus. Schlimmer noch, es fragt nicht nach Eingaben, während ich dort bin, und gibt diese Zeile nur wiederholt aus.

Ich verstehe, dass das letztere Problem wahrscheinlich auf Token-Probleme zurückzuführen ist, aber ich bin mir nicht sicher, wie ich sie lösen soll. Das Schließen und erneute Öffnen des Scanners führt dazu, dass Eclipse mich über "doppelte Objekte" beunruhigt. Durch einfaches Zuweisen der alten Eingabe zu einer nicht verwendeten Garbage-String-Variablen wird festgestellt, dass zur Laufzeit keine Zeile gefunden wurde, und ich habe nicht genügend Erfahrung über andere Möglichkeiten nachzudenken, um neue Eingaben zu erhalten.

Selbst wenn das geklärt ist, muss ich einen Weg finden, um im Fall einer Ganzzahl nicht in die Schleife zu gelangen. Ich verstehe nicht wirklich, warum Integer-Eingaben in der Schleife anfangen, also bin ich mir nicht sicher, wie das möglich wäre.

Bitte helfen? Entschuldigung, wenn dies eine alte Frage ist; Ich habe versucht, mir frühere Fragen anzusehen, aber keine scheint das gleiche Problem zu haben wie ich.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage