Schleifendurchlauf ab 2. Durchlauf klappt nicht

idaho369

Mitglied
Hallo liebe Mitleser,

ich habe folgendes kleines Programm (matchen von Zahlenraten und Zufallszahlziehen). Soweit so gut. Ich moechte es mit nur einer Schleife machen. Der erste Durchlauf klappt einwandfrei. Wenn ich nun aber den User per n/y Eingabe fragen moechte (scannermethode), ob er nocheinmal spielen moechte, sieht es so aus, als koenne das y nicht eingelesen werden. Wenn ich es auskommentiere und durch"y" ersetze, klappt es einwandfrei. Habt Ihr eine Idee.
Java:
import java.util.Scanner;
public class Book_3_10
{
    public static void main(String args[])
    {
        final int MAX = 5; // number between 1 and 100 inclusive
        int target, count = 1, guess;
        String again= "y";
        Scanner scan = new Scanner(System.in);

        //System.out.println("Want to play (y/n)?: ");
        //again = scan.nextLine();    

        while (again.equalsIgnoreCase("y"))
        {
            System.out.println();      
            target = (int) (Math.random()*MAX) +1;
         
            System.out.println ("Enter your guess (0 to quit): ");
            guess = scan.nextInt();
         
            if (guess > 0)
            {
                if (guess == target)
                    System.out.println("Right! Guesses: " +count);
                else if (guess < target)
                    System.out.println ("Your guess was too LOW");
                else
                    System.out.println("Your guess wass too HIGH");
            }        
            count = count + 1;
            System.out.println();

            System.out.print("Play again (y/n)?: " );
            again = scan.nextLine();      
            //again = "y";
        }

    }
}

Viele Gruesse
 
Zuletzt bearbeitet von einem Moderator:
Ändere das:
Code:
System.out.println ("Enter your guess (0 to quit): ");
guess = scan.nextInt();

mal auf:

Code:
System.out.println ("Enter your guess (0 to quit): ");
String line = scan.nextLine();
guess = Integer.parseInt(line);
 
Das ist ein altbekannter Fehler.

Java:
scan.nextInt();

liest wirklich nur die Zahl ein. Am Ende steht aber noch ein \n (für die neue Zeile). Das kommt dann (wegen des Bufferoverflows) eben beim nächsten scan.nextLine(); raus.
Somit steht jedes mal wenn du die Abfrage mit dem y/n ausführst ein \n drin --> es kommt zum Abbruch weil es eben != y ist.

Das kannst du beheben, in dem du einfach vor deiner y/n Abfrage einfach noch mal ein scan.nextLine() einbaust. Am besten vor der Ausgabe: "Play again.."

Alternative - wahrscheinlich sogar besser - deinen int mit nextLine einlesen und mit Integer.parseInt konvertieren

PS: @JStein52 war schneller 😀

Gruß
 
Die Begründung steht doch auf StackOverflow ... kannst du kein Englisch? (neutrale, nicht wertende Aussage 🙂 )
 
kannst du kein Englisch?
Doch kann Ich 🙂

Dachte nur nicht dass der Link deine Begründung ist.. hätte eher gedacht, dass es ergänzend für den TE ist, weil der Link für mich (nur meine Meinung ) keine Begründung ist, den Scanner nicht zu benutzen. Wenn man weiß dass man eben nach den ganzen nextFoo Methoden ein nextLine aufrufen muss (bzw gleich mit next Line und dann umwandeln arbeiten) dann finde Ich, dass der Scanner eine gute Wahl ist.
Eigentliche Intention war es herauszufinden ob du einen Grund kennst den Ich nicht kenne 😛
 

Zurück
Oben