Frage von Sheyn, 72

Wie eine Schleife in Java machen?

Hallo ich habe etwas programmiert wo man eine 1 oder 2 in die Konsole eingeben soll. Wird eine höhere Zahl eingegeben werden, soll aufgefordert werden, dass man nur eine 1 oder 2 eingeben soll und das Eingabefeld soll erneut erscheinen. bei eingabe eines buchstaben soll das Programm mit einer fehlermeldung beenden oder wenn es geht wieder zur eingabe zurück.

class Glücksspiel { public static void main (String[] args) {

    //Für eingabe in die Konsole + Zufallsgenerator
    Scanner scan = new Scanner( System.in );
    Random rand = new Random();
    
    int antwort=0, entscheidung=0, punktestand=0, zufall,start=1,spiel=0, highscore=0;
    
    
   
    //Anfangstext        
    System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    System.out.println("Willkommen zu dem Glücksspiel von Ersin Alkan.\n");
    System.out.println("Wollen Sie die Regeln angezeigt bekommen?"); 
    System.out.println("Ja = 1\nNein = 2"); 
    




    try
   {
    antwort = scan.nextInt();
   }
   catch(Exception e)
   {
       System.out.println("Es ist ein Fehler aufgetreten");
       
   }

   finally
   {           
    if  (antwort == 1)
    {
        System.out.println("Sie haben die Möglichkeit, zwischen zwei Zahlen zu wählen.");
        System.out.println("Eine der beiden Zahlen ist die richtige Antwort.");
        System.out.println("Ihre Gewinnchance liegt bei 50%.");
        System.out.println("Sollten sie eine richtige Antwort liefern, bekommen Sie 1 Punkt.");
        System.out.println("Bei der falschen Antwort gehen alle Ihre Punkte verloren.");
        System.out.println("Sie haben danach die Auswahl, das Spiel neuzustarten oder zu beenden.");
        System.out.println("Viel Glück!");
        spiel=1;
    }
       }
   if (antwort == 2)
    {
        spiel=1;
    }
    
   if(antwort > 2)
   {
        System.out.println("Nur 1 oder 2!");
   }
Antwort
von TUrabbIT, 19

Du kannst eine While-Schleife nutzen, aber musst dafür die Fehlerbehandlung stärker präzisieren. Denn so wird immer wenn kein Input da ist eine Fehlermeldung geschmissen.

Der Scanner wirft drei Exceptions:

  • NoSuchElementException - Kein (ungelesener) Input vorhanden.
  • InputMismatchException - Kein passender Input (kein Int oder zu groß)
  • IllegalStateException - Scanner ist geschlossen.

Die erste kannst du fangen und ignorieren. Das ist kein Zustand.

Die zweite kannst du fangen und solltest eine Fehlermeldung ausgeben, das es keine gültige Eingabe ist.

Die dritte ist auf jeden Fall ein Fehler solltest du den Scanner nicht bewusst geschlossen haben.

Du kannst dir die ersten zwei Exceptions sparen wenn du mit der Methode Scanner.hasNextInt zunächst prüfst ob eine gültige Eingabe vorhanden ist. Die Rückgabe ist true wenn eine gültige Eingabe vorhanden ist.

Für die Prüfung ob der Wert passend ist kannst du eine Exception schmeißen oder eine einfache if-Prüfung vornehmen.

Antwort
von Nijara, 44

Du könntest eine while-Schleife benutzen.

While(antwort > 2)
{
            Sytstem.out.println("Nur 1 oder 2!");
}

In diese Schleife kannst du dann erneut die Abfrage nach der Variable packen. Dann wird das Programm dies so oft wiederholen, bis die Richtige Zahl eingegeben wurde.

Kommentar von Sheyn ,

while (antwort > 2 )
{
try
{
antwort = scan.nextInt();
}

catch(Exception e)
{
System.out.println("Es ist ein Fehler aufgetreten");
}

finally
{
if (antwort == 1)
{
System.out.println("Sie haben die Möglichkeit, zwischen zwei Zahlen zu wählen.");
System.out.println("Eine der beiden Zahlen ist die richtige Antwort.");
System.out.println("Ihre Gewinnchance liegt bei 50%.");
System.out.println("Sollten sie eine richtige Antwort liefern, bekommen Sie 1 Punkt.");
System.out.println("Bei der falschen Antwort gehen alle Ihre Punkte verloren.");
System.out.println("Sie haben danach die Auswahl, das Spiel neuzustarten oder zu beenden.");
System.out.println("Viel Glück!");
spiel=1;
}
}
if (antwort == 2)
{
spiel=1;
}

if(antwort > 2)
{
System.out.println("Nur 1 oder 2!");

}
}

So?

Wenn ich das so habe kann ich nichts mehr eingeben:/

Kommentar von Nijara ,

try
{
antwort = scan.nextInt();
}

catch(Exception e)
{
System.out.println("Es ist ein Fehler aufgetreten");
}
while (antwort > 2 )
{
try
{
antwort = scan.nextInt();
}

catch(Exception e)
{
System.out.println("Es ist ein Fehler aufgetreten");
}
}

finally
{
if (antwort == 1)
{
System.out.println("Sie haben die Möglichkeit, zwischen zwei Zahlen zu wählen.");
System.out.println("Eine der beiden Zahlen ist die richtige Antwort.");
System.out.println("Ihre Gewinnchance liegt bei 50%.");
System.out.println("Sollten sie eine richtige Antwort liefern, bekommen Sie 1 Punkt.");
System.out.println("Bei der falschen Antwort gehen alle Ihre Punkte verloren.");
System.out.println("Sie haben danach die Auswahl, das Spiel neuzustarten oder zu beenden.");
System.out.println("Viel Glück!");
spiel=1;
}
}
if (antwort == 2)
{
spiel=1;
}

Erst einmal so die Variabel abfragen und danach die while-Schleife.

In diese Schleife muss nur der Code rein, der ausgeführt werden soll, wenn die Zahl falsch ist. Danach wird die Schleife geschlossen und der Rest des Codes ausgefüht.

Kommentar von Sheyn ,

Wenn ich aber die While schleife schließe mit der }

Dann nimmt der das finally nicht mehr.

Ich hab dann so gemcht dass ich einfach das finally weggenommen habe

aber gebe ich dann einen Buchstaben ein

spamt er mir die ganze konsole voll mit "Es ist ein fehler aufgetreten"

Aber danke schonmal für die netten antworten!

Kommentar von Nijara ,

Das finally braucht man auch eigentlich nicht unbedingt.

Du kannst in deiner while Abfrage noch Erweitern, dass er die andern Fehler abfängt. Also eine zu keine Zahl oder Buchstaben. Da gibt es auch funktionen zu, musst du einfach mal Googeln.

Wegen dem spamen kannst du die While-Schleif mit in das Try packen.
Dann würde es so aussehen:

try {
antwort = scan.nextInt();
while (antwort > 2) {
System.out.println("Ja = 1\nNein = 2");
antwort = scan.nextInt();
}
} catch (Exception e) {
System.out.println("Es ist ein Fehler aufgetreten");
}

Dann geht es auch mit dem finally wieder ;) Ist dann wahrscheinlich so die bessere Variante :D


Antwort
von Garfield0001, 31

In VBA würde ich es so schreiben:

Do
Erg=InputBox (Bitte Zahl eingeben")
If Erg ="1" Or Erg ="2" Then Exit Do
Loop

So wird immer wiederholt wenn etwas anderes eingegeben wird.

Keine passende Antwort gefunden?

Fragen Sie die Community