Erste Schritte Scanner mehrere male benutzen (Konsole)

Servus! Ich bin recht neu in Java und habe leider ein Problem. Man soll eine Zahl in die Konsole eingeben. Wenn die Zahl nicht 5 ist möchte ich das eine Meldung erscheint und man so lange Eingaben machen kann bis die Zahl 5. Das Problem ist das der Scanner nicht ein zweites oder drittes mal ausgegeben wird.
Ich habe da jetzt Stunden lang rumprobiert aber naja seht selber:

Java:
import java.util.Scanner;
puplic class TestScanner {
puplic static void main(String[] args){
int rateZahl = 5;
Scanner s = new Scanner(System.in)
System.out.println("Bitte eine Zahl raten");
int userEingabe= s.nextInt();
if (rateZahl == userEingabe) { System.out.println("Korrekt!! ");
}
// Hier sollte eine erneute eingabe möglich sein bzw mehrere bis zahl erraten
else Scanner s = new Scanner(System.in);
System.out.println(" Try again");
int userEingabe = s.nextInt();
}

}
}

Da meckert das Programm das s schon vorhanden ist. Wie kann ich den Scanner weiter benutzen?
Ich habe irgendwo gelesen das man nicht für jede Eingabe einen extra Scanner braucht.

Habe es auch mit einer while schleife probiert
 
Hallo.

Du erstellst vor dem vom if else ein Scanner s und eine int userEingabe und erstellst im else dann nochmal ein Scanner s und nach dem else ein int userEingabe. Das geht nicht.
Es fehlen ; .

Und die bessere Schreibweise für if else
Java:
if(bedingung) {
......
} else {
  .....
}

Verwende do while und als Bedingung vergleiche die userEingabe mit der rateZahl. Die Schleife sollte solange gehen wie die Zahlen ungleich sind. In der Schleife solltest du dann s.nextInt() aufrufen und den Wert der userEingabe zuweisen.
 
Moin,

außerdem ist in Deinem geposten Code noch ein böser Fehler drin!
Ob wegen der schlechten Formatierung oder der Übertragung nach hier kann ich nicht beurteilen!
Java:
if( rateZahl == userEingabe )
{
    System.out.println( "Korrekt!! " );
}
// Hier sollte eine erneute eingabe möglich sein bzw mehrere bis zahl erraten
else
    Scanner s = new Scanner(System.in);  // !!

System.out.println( "Try again" );
int userEingabe = s.nextInt();
So wie Du es geschrieben hast, würde im ELSE-Fall nur die eine Zeile ausgeführt, die versucht, den neuen Scanner zu deklarieren. Die beiden nachfolgenden Zeilen würden IMMER ausgeführt!

Deswegen: IMMER klammern, auch wenn es wie im IF-Fall nur eine Zeile ist! Andernfalls suchst Du Dich u. U. dumm und dämlich 😉

VG Klaus
 
Java:
package ab;
import java.util.Scanner;
public class TestScanner {
public static void main (String[] args) {
int rateZahl = 5;

Scanner s = new Scanner(System.in);
System.out.println("Bitte eine Zahl raten");

int userEingabe = s.nextInt();

while(rateZahl != userEingabe)  {System.out.println(userEingabe +" Leider Falsch! try again!");
userEingabe = s.nextInt();
}
if(rateZahl == userEingabe) {System.out.println("Korrekt. "+userEingabe+" ist richtig");
 
}
}
}
Es funktioniert!! Irgendwelche verbesserungsvorschläge?
PS. Die Formatierung wurde zerschossen
 
Du brauchst nach der while-Schleife keine If-Abfrage, denn es ist garantiert das rateZahl == userEingabe ist.
 
Danke für die zügigen Antworten. Ich will kein neues Thema aufmachen, das passt meiner Meinung nach auch hier her. Mein Verständnisproblem lag darin das ich den Scanner nicht in die While Schleife gepackt habe.
Das Problem ist mal wieder der Scanner (oder ich 😉)....
Es wird der Fehler "duplicate local variable" ausgegeben. Er meckert bei "userEingabe" und "userEingabe2".


Java:
import java.util.Scanner;

public class KontoProgramm {

    public static void main(String[] args) {
        String userName = "admin";
        int kontoNr = 1234;
        double kontoStand = 100.32;

        Scanner s = new Scanner(System.in);
        System.out.println("Bitte Benutzernamen eingeben..");
        String userEingabe = s.nextLine();
        System.out.println();
        System.out.println("Bitte Kontonummer eingeben..");
        System.out.println();
        int userEingabe2 = s.nextInt();
  
      
        while (!userName.equals(userEingabe) || kontoNr != userEingabe2);
        {System.out.println("Benutzername oder Password sind falsch! Try again!!!");
      
        System.out.println("Bitte Benutzernamen eingeben");
        String userEingabe = s.nextLine();
        System.out.println("Bitte Kontonummer eingeben!");
        int userEingabe2 = s.nextInt();
        }
  
    /*    if (userName.equals(userEingabe) && kontoNr == userEingabe2) {
            System.out.println("Guten Tag " + userName + " Ihr Kontostand betraegt " + kontoStand);
            System.out.println("Was moechten Sie tun. Einzahlen (e) oder abbuchen (a)?");
        } else
            System.out.println("Ihre Zugangsdaten sind falsch. Bitte nochmal anmelden.....");

*/
    }
  
    }

Hier aber hat es funktioniert
Java:
package ab;
import java.util.Scanner;
public class TestScanner {
public static void main (String[] args) {
int rateZahl = 5;

Scanner s = new Scanner(System.in);
System.out.println("Bitte eine Zahl raten");

int userEingabe = s.nextInt();

while(rateZahl != userEingabe)  {System.out.println(userEingabe +" Leider Falsch! try again!");
userEingabe = s.nextInt();
}
if(rateZahl == userEingabe) {System.out.println("Korrekt. "+userEingabe+" ist richtig");
}
}
}

Warum wird bei dem 2. Beispiel nicht gemeckert?
 

Neue Themen


Zurück
Oben