Scanner-Methode: Mehrere Eingaben mit Exception behandeln

Status
Nicht offen für weitere Antworten.

mefistochen

Mitglied
Hallo!

Habe nachfolgendes Programm geschrieben.
Hierin sollen 2 Werte eingegeben werden. Wenn der Benutzer die Werte falsch eingibt, z. B. ein . anstatt , verwendet für die Darstellung seiner Wunschzahl, soll das Programm selbst einen Wert festsetzen.

Wenn das bei der 2. Eingabe des Benutzers passiert, so verwendet das Programm richtigerweise die vom Benutzer gemachte 1. Eingabe.

Wenn der Benutzer jedoch schon bei der 1. Eingabe einen Fehler macht, so hat er beim 2. Wert nicht mehr die Möglichkeit, eine Eingabe zu machen.

Scheinbar steckt die fehlerhafte erste im Scanner-Objekt, während die 2. Zahl abgefragt wird. Ich habe bei Scanner aber keine Methode gefunden, die den Inhalt eines Scanner-Objektes leert. Aber hier zunächst das Minimalprogramm:

Java:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("T eingeben!");
        double T;
        try {
            T = in.nextDouble();
        } 
catch (InputMismatchException e) {
            System.out.println("Die Eingabe war inkorrekt. T wird auf 1 gesetzt.");
            T=1.0;
        }
        System.out.println("v eingeben!");
        double v;
        try{
            v=in.nextDouble();
        } catch(InputMismatchException e){
            System.out.println("Die Eingabe war inkorrekt. v wird auf 7 gesetzt.");
            v=7.0;
        }
System.out.println("T hat den Wert "+T);
         System.out.println("v hat den Wert "+v);
    }
}
[Edit Ebenius]Damit keiner Augenkrebs bekommt, hab ich mal die JAVA-Tags noch reineditiert.

Gibt es eine Möglichkeit, den Inhalt eines Scanner-Objektes zu leeren oder sollte das anders gelöst werden?

Viele Dank!
mefistochen
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
es gibt auch schöne [ java ][/ java ]-Tags für Code

mit readLine()
kannst du alles bis zum nächsten Enter einlesen (und gleich vergessen)
 

mefistochen

Mitglied
OK:

Java:
import java.util.InputMismatchException;
import java.util.Scanner;
//import java.io.*;
public class Test {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("T eingeben!");
        double T;
        try {
            T = in.nextDouble();

        } catch (InputMismatchException e) {
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für T einfach 1 eingesetzt");
            T=1.0;
        }
        System.out.println("v eingeben!");
        double v;
        try{
            v=in.nextDouble();
        } catch(InputMismatchException e){
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für v einfach 7,0 eingesetzt");
            v=7.0;
        }
        in.close();

         System.out.println("T hat den Wert "+T);
         System.out.println("v hat den Wert "+v);
    }
}


 
Zuletzt bearbeitet:

mefistochen

Mitglied
Hab das jetzt mal folgender maßen umgeschrieben. Leider funktioniert es jetzt mit dem Fehlerhandeln gar nicht mehr:
Java:
import java.io.*;
public class Test {

    public static void main(String[] args) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("T eingeben!");
        double T;
        try {
            String Tstring=in.readLine();
            T = Double.valueOf(Tstring);

        } catch (IOException e) {
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für T einfach 1 eingesetzt");
            T=1.0;
        }
        System.out.println("v eingeben!");
        double v;
        String vstring;
        try{
            vstring=in.readLine();
            v=Double.valueOf(vstring);
        } catch(IOException e){
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für v einfach 7 eingesetzt");
            v=7.0;
        }
        try{
        in.close();
        }
        catch (IOException e){}

         System.out.println("T hat den Wert "+T);
         System.out.println("v hat den Wert "+v);
    }
}
 
S

SlaterB

Gast
ich hatte zwar etwas anderes im Sinn (im catch readLine() aufrufen, um den Rest des Scanners bis Enter zu leeren)
aber das sollte genauso klappen, bei mir gehts

was genau funktioniert denn nicht (mehr) bei genau welchen Eingaben?

> Eigentlich wollte ich auch den Eingabestandard mit , als Dezimalkomma beibehalten.

hat das auch was mit readLine() zu tun?
oder ging das nicht eher vorher auch nicht,

verwende DecimalFormat statt Double.valueOf

edit: oder Scanner.nextDouble hatte das automatisch erkannt,
dann kann readLine + valueOf wirklich schlechter sein
 
Zuletzt bearbeitet von einem Moderator:

mefistochen

Mitglied
OK:

Mein zuletzt gepostetes Programm läuft genau dann, wenn ich das Dezimalkomma als . eingebe, sonst nicht. Bei dem 1. Programm war es genau umgekehrt.

Eine Beispielfehlerausgabe beim neuen Code ist:

run:
T eingeben!
2,0
Exception in thread "main" java.lang.NumberFormatException: For input string: "2,0"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1242)
at java.lang.Double.valueOf(Double.java:492)
at Test.main(Test.java:13)
Java Result: 1
BUILD SUCCESSFUL (total time: 8 seconds)

Hier wird nicht, wie gewünscht, der fehlerhafte Wert umgesetzt.
Beim ursprünglichen Code hat das wenigstens bei der 1. Eingabe funktioniert.

Die andere Idee, bei der ich nur im catch-Block etwas zum Abfangen mache, klingt interessant, da ich dann nahe am ursprünglichen Code bleiben kann.
Wie aber soll das funktionieren. Ich kann auf das Scanner-Objekt namens "in" nicht die Methode readLine() anwenden, denn die kann nur von BufferedReader-Objekten behandelt werden.

[Wie würde das mit dem DecimalFormat funktionieren. Ich habe den Eindruck, die Methode ist zur Umwandlung der verschiedenen Schreibweisen gut, aber nicht unbedingt, um den Rechner einen String in eine Zahl umwandeln zu lassen.]
Aber das letzte ist vielleicht auch nicht so wichtig, da ich es sowieso lieber mit der anderen Methode machen würde.
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
[Wie würde das mit dem DecimalFormat funktionieren. Ich habe den Eindruck, die Methode ist zur Umwandlung der verschiedenen Schreibweisen gut, aber nicht unbedingt, um den Rechner einen String in eine Zahl umwandeln zu lassen.]
Dieser Eindruck täuscht. Einfachstes Beispiel:
Java:
try {
  final double val =
        NumberFormat.getNumberInstance().parse(inputString).doubleValue();
} catch (ParseException ex) {
  // Fehlerbehandlung hier
}
Zum Rest hab ich nix zu sagen. :)

Ebenius
 

mefistochen

Mitglied
Ja. So funktionierts.

Vielen Dank!!!

Java:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("T eingeben!");
        double T;
        try {
            T = in.nextDouble();

        } catch (InputMismatchException e) {
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für T einfach 1 eingesetzt");
            T=1.0;
            in.nextLine();
        }
        System.out.println("v eingeben!");
        double v;
        try{
            v=in.nextDouble();
        } catch(InputMismatchException e){
            System.out.println("Ich habe den inkorrekten Wert abgefangen und für v einfach 7 eingesetzt");
            v=7.0;
            in.nextLine();
        }
         System.out.println("T hat den Wert "+T);
         System.out.println("v hat den Wert "+v);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erste Schritte Scanner in Methode einbauen Allgemeine Java-Themen 4
S Die Methode close() der Klasse Scanner Allgemeine Java-Themen 3
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
J Variablen Scanner als Klassenvariable Allgemeine Java-Themen 5
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
Bluedaishi Twain Scanner im Netzwerk Allgemeine Java-Themen 10
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
J Scanner oder BufferReader Allgemeine Java-Themen 2
1 Java Scanner Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
T Datentypen Scanner Allgemeine Java-Themen 4
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
B QR Scanner WebCam Allgemeine Java-Themen 2
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
Ark Locale, Formatter und Scanner: Bug bei Gleitkommazahlen? Allgemeine Java-Themen 2
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
A Split, Scanner, StringTokenizer oder PatternMatching für flexibles Dateieinlesen? Allgemeine Java-Themen 2
D java.util.InputMismatchException im Scanner -wieso? Allgemeine Java-Themen 5
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
N Scanner läuft nicht durch Allgemeine Java-Themen 2
R Scanner mit Java Allgemeine Java-Themen 2
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
R Barcode Scanner mit JavaPos ansprechen Allgemeine Java-Themen 1
M Barcode-Scanner unterscheidung zur Tastertur Allgemeine Java-Themen 7
H Problem mit Scanner Klasse Allgemeine Java-Themen 7
E Wie Zeichen eingeben mit Klasse Scanner? Allgemeine Java-Themen 5
D Problem mit java.util.scanner: Falsche Ergebnisse Allgemeine Java-Themen 4
E Scanner Frage :) Allgemeine Java-Themen 8
A Unterschied Scanner und Matcher Allgemeine Java-Themen 5
S Problem mit Scanner Allgemeine Java-Themen 5
G Barcode (Strichcode)-Scanner Allgemeine Java-Themen 10
G Scanner.hasNext() beendet den Thread ohne Message Allgemeine Java-Themen 4
S Scanner Allgemeine Java-Themen 6
G Scanner-Generator zur Erkennung von Java Tokens Allgemeine Java-Themen 7
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
K Scanner.hasNext findet kein Ende Allgemeine Java-Themen 6
D ProcessBuilder und Scanner Probleme mit einigen Prozessen Allgemeine Java-Themen 2
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
bernd java.util.Scanner erst ab Java 1.5? Allgemeine Java-Themen 4
D Lesbare args für die main-Methode Allgemeine Java-Themen 6
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben