Scanner String Eingaben ignorieren

Status
Nicht offen für weitere Antworten.

Maxga

Mitglied
Guten Tag,
ich lasse bei einem Programm mit while(eingabe.hasNext())) auf eine Eingabe warten, wenn die eingabe dann übereinstimmt passiert bisschen was, ist ja nicht so wichtig. Nur wird der Scanner in der Weilschleife am Ende geschlossen, damit das Programm auch zum Ende kommt. Nur gibt das ja dann von der Methode hasNext() der Klasse Scanner eine IllegalStateException aus. Wie kann ich das umgehen?
Quelltextausschnitt sieht ungefähr so aus:
Code:
Scanner eingabe = new Scanner(System.in);

while(eingabe.hasNext())
{
      if(eingabe.next().equals("2200")
      {
            System.out.println("Hier haben sie ihre Fahrkarte");
            eingabe.close();
      }
      else
      {
            System.out.println("Zu wenig Geld bezahlt. Restgeld wurde ausgeworfen.")
      }
}
Dann kann ich halt solange Beträge eingeben, bis ich auf 2200 eingebe, dann wird es beendet, nur kommt dann halt die Fehlermeldung von der Methode hasNext() die in der while-Schleife steht, und der Scanner ist schon beendet.
Kann es net testen gerade, weil das in der Schule abgespeichert ist, aber könnte ich das it einem System.exit(0); nach dem eingabe.close() umgehen? Oder wie kann ich das umgehen, bitte um Hilfe.

MfG
 
S

SlaterB

Gast
ich sehe auf die Schnelle auch keine Methode in Scanner, um abzufragen, ob der Scanner geschlossen ist,
du könntest dir aber eine separate boolean-Variable definieren, die auch passend setzen und in der while-Bedingung berücksichtigen

oder den Stream offen lassen, schon etwas merkwürdig, System.in zu sperren
 

Maxga

Mitglied
Guten Tag,
habe noch eine Frage zu der Aufgabe jetzt, wollte net extra neuen Thread eröffnen.
Und zwar sollen wir einen Fahrkartenautomat wie gesagt modellieren.
Klappt soweit ganz gut, ich poste ma den Quelltext meiner beiden Klassen:
Hier die Klasse "Fahrschein":
Code:
public class Fahrschein
{
    private int preis;
    private String name;
    
    public Fahrschein(String name)
    {
        if(name.equals("AB"))
        {
            preis = 2100;
            this.name = "AB";
        }
        if(name.equals("BC"))
        {
            preis = 2500;
            this.name = "BC";
        }
        if(name.equals("ABC"))
        {
            preis = 2800;
            this.name = "ABC";
        }
    }
    
    
    public void drucken()
    {
        System.out.println("\"Ich bin eine Fahrkarte vom Typ " + name + " und koste " + preis + " cent.\"");
    }
    
    public String getName()
    {
        return name;
    }
    
    public int getPreis()
    {
        return preis;
    }
}
Hier die Klasse "Automat":
Code:
import java.util.Scanner;
public class Automat
{
   Scanner eingabe = new Scanner(System.in);
   private int wechselgeld;
   private int eingeworfenesGeld;
   private int schonBezahlt = 0;
   private int restbetrag;
   Fahrschein f;
   
   /* Wähle die Art des Tickets(1, 2 oder 3) und erstelle ein Objekt der jeweiligen Ticketart.
    * Gebe in der Konsole die gewählte Art und den Preis aus.
    */
   public void ticketAnfordern()
   {
        System.out.println("Guten Tag, wählen sie ihr Ticket:\n1.AB für 2100 cent.\n2.BC für 2500 cent.\n3.ABC für 2800 cent.");
        int ticketArt = eingabe.nextInt();
        
        while (ticketArt != 1 || ticketArt != 2 || ticketArt != 3)
        {
            if(ticketArt == 1)
            {
                f = new Fahrschein("AB");
            }
            else if(ticketArt == 2)
            {
                f = new Fahrschein("BC");
            }
            else if(ticketArt == 3)
            {
                f = new Fahrschein("ABC");
            }
            else
            {
                System.out.println("Keine gültige Angabe. Bitte geben sie 1,2 oder 3 an.");
            }
        }System.out.println("\nSie haben " + f.getName() + " gewählt. Bitte bezahlen sie " + f.getPreis() + " cent.");
    }
   
    
    
    /* 
     * Fordere ein Ticket an
     * Gebe die zu bezahlende Menge in der Konsole aus. Warte dann auf Eingaben.
     * Entspricht die Eingabe dem zu bezahlenden Preis, "drucke die Fahrkarte" und beende das Programm.
     * Gebe den zu bezahlenden Restbetrag aus, wenn zu wenig bezahlt wurde.
     * Ist die Eingabe höher als der zu bezahlende Preis, "drucke die Fahrkarte", "gebe das Wechselgeld aus", und beende das Programm.
     */
    public void systemAblauf()
    {
        ticketAnfordern();
        while(eingabe.hasNext())
        {
            int eingabeSpeicher = eingabe.nextInt();                                            // Speicherung der Eingabe, zum Vergleich mit dem Preis.
            if(eingabeSpeicher == f.getPreis())
            {
                f.drucken();
                System.out.println("\nBVG wünscht ihnen weiterhin einen schönen Tag.");
                eingabe.close();
                System.exit(0);
            }
            else
            {
                eingeworfenesGeld = eingabeSpeicher;
                schonBezahlt = schonBezahlt + eingeworfenesGeld;                                
                restbetrag = f.getPreis() - schonBezahlt;                               
                
                if (schonBezahlt < f.getPreis())
                {
                    System.out.println("Noch zu bezahlen: " + restbetrag + " cent");
                }
                if (schonBezahlt > f.getPreis())
                {
                    wechselgeld = schonBezahlt - f.getPreis();
                    f.drucken();
                    System.out.println("Ihr Wechselgeld: " + wechselgeld + "cent.");
                    System.out.println("\nBVG wünscht ihnen weiterhin einen schönen Tag.");
                    eingabe.close();
                    System.exit(0);
                }
                if (schonBezahlt == f.getPreis())
                {
                    f.drucken();
                    System.out.println("\nBVG wünscht ihnen weiterhin einen schönen Tag.");
                    eingabe.close();
                    System.exit(0);
                }
            }
        }
    }
    
    public static void main(String[] args)
    {
        Automat a = new Automat();
        a.systemAblauf();
    }
}

So nun habe ich 2 Probleme. Beide in der Methode"ticketAnfordern". Einmal bei "int ticketArt = eingabe.nextInt();"
Und zwar, klappt soweit ganz gut, nur wenn ich jetz einen String eingabe, beispielsweiße ich schreibe einfach mal r oder so, dann gibt es eine Fehlermeldung. Wie bringe ich das Programm alle Eingaben, die nicht dem Typ int entsprechen, zu ignorieren?
Und dann noch eine Frage, und zwar steht ja zur Bestimmung der Ticketart alles in einer while-Schleife. Ich wollte eigentlich, dass man was eingibt, wenns net das richtige ist, wartet das Programm auf die nächste Eingabe, wenn die wieder nicht der richtigen entspricht, wieder den Text ausgeben, dass es keine gültige Angabe ist. Dieser Text wird leider in Schleife ausgegeben, da das Programm nicht auf die nächste Eingabe wartet, wie bringe ich es dazu, dass zu tun?

MfG

EDIT: Komisch, jetzt, obwohl ich nichts verändert habe, passiert bei der Auswahl der Ticketart gar nichts mehr. Selbst wenn ich r eingebe, kommt keine Fehlermeldung, auch wenn ich 2 , also das richtige, eingebe, passiert gar nichts mehr, und ich kann unendlich viele Sachen eingeben.Woran liegt das?
 

Maxga

Mitglied
So, habe jetz die Bedingung der while-Schleife in while(f == null) geändert, jetzt klappt der Teil schonmal.
Jetz brauche ich nurnoch Hilfe dabei, wie sage ich dem Scanner, dass er nur int-Werte beachten soll, und alle anderen ignorieren soll? Am besten noch in Verknüpfung mit einer Textausgabe, dass die EIngabe ungültig war.
Danke,

MfG

Edit: Ok, Problem ist gelöst, musste einfach nur in einem catch-Block die InputMismatchException auffangen. Dann war ich dort zwar in einer Endlosschleife, weil der Buffer durch nextInt() nicht geleert wurde(Ist das eigentlich ein Bug)? Aber das ging schnell durch nextLine() zu beheben. Jetzt ist zumindestens alles super.
 

Murray

Top Contributor
Maxga hat gesagt.:
Dann war ich dort zwar in einer Endlosschleife, weil der Buffer durch nextInt() nicht geleert wurde(Ist das eigentlich ein Bug)?
Dieses Verhalten ist zwar als Bug gemeldet, aber nicht als solcher akzeptiert. S.a. hier.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
J scanner, String einlesen und vergleichen Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
B Werte über Scanner in ein 3 dim String Array schreiben Java Basics - Anfänger-Themen 7
M Scanner mit String Java Basics - Anfänger-Themen 5
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben