1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Gültigkeitsüberprüfung von Eingaben

  • Horrendus
  • 2. April 2007 um 13:59
  • Unerledigt
  • Horrendus
    7
    Horrendus
    Mitglied
    Punkte
    520
    Beiträge
    92
    • 2. April 2007 um 13:59
    • #1

    Hallo,

    ich bin gerade dabei mir im Selbsstudium (und mit den EProg Folien und denen der geführten Gruppe) Java beizubringen, da ich wahrscheinlich nächstes Semester EProg machen werde.
    Und da hab ich mal ein kleines ZahlenrateSpiel geschrieben, das weder objektorientiert und schon gar nicht nach Java Beans Spezifikation ist (hab vor 7 - 10 Jahren Pascal und C programmiert und muss mich erst an die Objektorientierte Programmierung gewöhnen - Tips hierfür nehme ich auch gerne an). :winking_face:

    Jetzt will ich mit der Scannerfunktion .hasNextInt die Zahl mal auf Gültigkeit überprüfen, nur mal ob sie überhaupt eine IntZahl ist :winking_face:
    Um jetzt falls es keine Zahl ist wieder zur Eingabe zurückzukommen habe ich das ganze in die bereits vorhandene Schleife eingebaut.
    Und hier ist mein Problem, sobald ich einmal eine ungültige Eingabe mache, befindet er sich in einer Endlosschleife in dem Teil wo keine gültige Eingabe ist.
    Kann mir jemand da helfen? Sourcecode siehe unten.

    lg Stefan

    Java
    import java.util.Scanner;
    
    
    public class Zahlenraten {
    
    public static void main (String[] args) {
        System.out.println("Dieses Programm erzeugt eine Zufallszahl zwischen 1 und 1000.");
        System.out.println("Du hast 20 Versuche diese Zahl zu erraten.");
        System.out.println();
        int Zufallszahl = (int) ((Math.random()*1000)+1);
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <= 20; i++) {
            System.out.println("Versuch Nummer " + i);
            System.out.print("Die gesuchte Zahl zwischen 1 und 1000 ist: ");
            if (sc.hasNextInt()) {
                int versuch = sc.nextInt();
                 if (versuch == Zufallszahl) {
                    System.out.println("Richtig, die Zahl ist " + Zufallszahl + ". Erraten beim " + i + ". Versuch.");
                    System.exit(0);
                }
                else {
                    if (versuch > Zufallszahl) {
                        System.out.println("Die gesuchte Zahl ist kleiner als " + versuch + ".");
                    }
                    else {
                        System.out.println("Die gesuchte Zahl ist grösser als " + versuch + ".");
                    }
                }
            }
            else { //sobald er einmal auf diesen Else Teil kommt beginnt eine Endlosschleife, er fragt gar nichtmehr nach einer Eingabe
                System.out.println();
                System.out.println("Ungültige Eingabe, bitte Eingabe wiederholen.");
                i--;
            }
        }
        System.out.println("Du hast die Zahl nach 20 Versuchen nicht erraten.");
    }
    
    }
    Alles anzeigen
  • samyjr
    8
    samyjr
    Mitglied
    Reaktionen
    4
    Punkte
    609
    Beiträge
    117
    • 2. April 2007 um 14:46
    • #2

    du hast sc.next(); vergessen, im else zweig:

    else { //sobald er einmal auf diesen Else Teil kommt beginnt eine Endlosschleife, er fragt gar nichtmehr nach einer Eingabe
    System.out.println();
    System.out.println("Ungültige Eingabe, bitte Eingabe wiederholen.");
    sc.next();
    i--;
    }

    du musst die "falsche" eingabe konsumieren (next()) und dann kann man erst was neues eingeben.
    ansonsten bleibt die "falsche" eingabe immer noch stehen und du springst andauernd in den else-zweig.

    mit sc.nextInt() konsumierst du den naechsten Int in der eingabe übrigens :winking_face:

    mfg,
    samyjr

  • Horrendus
    7
    Horrendus
    Mitglied
    Punkte
    520
    Beiträge
    92
    • 2. April 2007 um 14:53
    • #3

    Hmmm ... das heisst ich nehm ein sc.Next das mit fast jeder eingabe fertig wird und schmeiss es eigentlich gleich darauf weg. Super Idee, danke :winking_face:

    Andere Frage ... im if wo ich bereits das has.NextInt() habe ... kann ich dort auch gleich Vergleichsoperatoren auf den Integer anwenden (also 0 < x < 1001)?
    Oder muss ich da noch ein weiteres if einbauen?

    lg Stefan

  • Horrendus
    7
    Horrendus
    Mitglied
    Punkte
    520
    Beiträge
    92
    • 2. April 2007 um 18:36
    • #4
    Zitat von samyjr


    mit sc.nextInt() konsumierst du den naechsten Int in der eingabe übrigens :winking_face:

    Hab mir deinen Beitrag nochmal durchgelesen und den Teil hier nicht ganz verstanden wie du das meinst?

    lg Stefan

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung