Ungültige Eingaben: Fehler ausgeben

Aucass

Mitglied
Guten Tag zusammen,

heute ist mein 3 Tag mit Java und ich spiele mal hier und dort etwas rum um es besser zu verstehen.
Jetzt habe ich aber mal eine Frage, da ich dazu leider keine Antworten gefunden habe.

Ich habe eine kleine Anwendung erstellt, die mir die Differenz zwischen zwei Uhrzeiten ausgibt und mir sagt ob die Minutenanzahl von 175 erfüllt ist oder nicht.
Gebe ich nun wie gefordert meine Uhrzeiten im Format von HH:MM an, klappt alles wunderbar.

Ich möchte jedoch, dass er mir in einem GUI-Dialog einen Fehlertext ausgibt, sobald das Format von HH:MM falsch ist (Egal ob falsches Format oder Zeichen wie z.b Buchstaben). Wie stelle ich das an?

Wenn ihr noch ein paar Tip's habt, was man an diesem Code noch ändern könnte oder es einfacher gestallten könnte, immer her damit! Aber denkt dran, ich bin erst seit 3 Tagen dabei :D

Java:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JOptionPane;


public class Uhrzeiten2 {

   public static void main(String[] args) throws ParseException {
      DateFormat df = new SimpleDateFormat("HH:mm");
    
      String zeit1 = javax.swing.JOptionPane.showInputDialog( null, "Beginn: (HH:MM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
      String zeit2 = javax.swing.JOptionPane.showInputDialog( null, "Ende: (HH:MM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
    
    Date datum1 = df.parse(zeit1);
    Date datum2 = df.parse(zeit2);
    
    long dif = datum2.getTime()- datum1.getTime();
    long dif2 = dif/1000/60;
    
    JOptionPane.showMessageDialog(null, dif2 < 175 ? "Zeit nicht erfüllt \n" + dif2 +" Minuten von 175 Minuten!" : "Zeit erfüllt \n" + dif2 +" Minuten von 175 Minuten!", "Zeitenberechnung", JOptionPane.INFORMATION_MESSAGE);
    
   }
}
 
Zuletzt bearbeitet von einem Moderator:

Aucass

Mitglied
Die Methode "parse" liefert "null" zurück fall es einen Fehler gibt.
Sprich du musst prüfen ob datum1 oder datum2 == null sind, wenn ja gab es einen Fehler.

Sorry, aber das musst du mir etwas genauer erklären. Grade mal etwas probiert, aber komme zu keinem Ergebnis!
Wie fange ich den "null" ab, falls es ausgegeben wird?
 

Joose

Top Contributor
Die Methode "parse" liefert dir entweder ein Date Objekt zurück oder eben "null" (nichts).
Jetzt musst du prüfen ob deine Variable "datum1" bzw. "datum2" Objekte enthalten oder eben "null". Das kannst du mittels if-Bedingung (!= null) feststellen.
 

Aucass

Mitglied
Ich glaube ich denke einfach zu umständlich!
Ich habe es jetzt so umgesetzt, wie ich es verstanden habe und so passt es nicht!
Egal welche Eingabe ich tätige, die if-Anweisung ist immer erfüllt.
Er gibt mir also jedes mal Ungültige Eingabe aus, selbst wenn die Eingabe richtig ist.

Vielleicht kannst du mir mal ein Beispiel geben?

Java:
if (datum1 != null)
       System.out.println("Beginn: Ungültige Eingabe");
       
    if (datum2 != null)
       System.out.println("Ende: Ungültige Eingabe");
 

Tarrew

Top Contributor
Du benutzt nicht die verlinkte parse() Methode von Joose, sondern diese:
https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#parse(java.lang.String)

Im Fehlerfall wird eine ParseException geworfen, die du im Moment einfach throwst. Deswegen beendet sich dein Programm einfach. Du solltest die Exception catchen und dann einen Fehler ausgeben:
Java:
        Date datum1 = null;
        try {
            datum1 = df.parse(zeit1);
        } catch (ParseException e) {
            System.out.println("Beginn: Ungültige Eingabe");
            return;
        }
 

Viktim

Bekanntes Mitglied
Für des Fenster mit der GUI kannst du einfach ein JOptionePane nehmen...
sähe dann so aus:
Java:
JOptionPane.showMessageDialog(null, "Text");
 

Aucass

Mitglied
Da hat Tarrew natürlich recht, dass ich die falsche Parse Methode verlinkt habe. :(
Macht nix, passiert ;)


ParseException hat ->fast<- wunderbar geklappt! Ich habe es vorher schon gesehen, bin mit try & catch aber nicht so vertraut. Kommt alles noch ;)

Ich habe es jetzt wie folgt:
Java:
Date datum1 = null;
    try {
       String zeit1 = javax.swing.JOptionPane.showInputDialog( null, "Beginn: (HHMM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
    datum1 = df.parse(zeit1);
    } catch (ParseException e) {
       JOptionPane.showMessageDialog( null, "Ungültige Eingabe");
    return;
    }

Und das gleiche natürlich für datum2.
Gebe ich nun in das Dialogfenster "Hallo" ein, gibt er mir die ungültige Eingabe aus - So wie es soll!
Gebe ich aber z.b fünf Zeichen ein, obwohl nur 4 gefordert werden (HHmm), passiert nix!

Eingabe: 08:00 -> Ausgabe: Ungültige Eingabe -> Richtig!
Eingabe: 0800 -> Ausgabe: Richtige Eingabe -> Richtig!
Eingabe: 08001 -> Ausgabe: Richtige Einagabe -> Falsch, da 5 Zeichen!

Und noch kurz eine andere Frage:
Wenn eine ungültige Eingabe passiert, soll das Eingabefenster erneut erscheinen!
Wie realisiert man sowas am simpelsten?
Ich habe was von LineNumberReader gelsen, ist das sinnvoll?
Oder macht es auch eine normale while-Schleife?
 

Aucass

Mitglied
Okay, dass nur 4 Zeichen erlaubt sind, habe ich mit einer Raute in
Java:
DateFormat df = new SimpleDateFormat("HHmm#");

gelöst! Ist das so die optimale Vorgehensweise?

Und wie geht es nun mit der Schleife?
So wie ich den Sinn einer While-Schleife verstanden habe, sollte es doch so funktionieren?!:
Java:
while (true){
         try {
             String zeit1 = JOptionPane.showInputDialog( null, "Beginn: (HHMM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
             datum1 = df.parse(zeit1);
             break;
         } catch (ParseException e) {
             JOptionPane.showMessageDialog( null,"Ungültige Eingabe! \nFormat beachten!" );
             return;
    }
      }

Das klappt aber nicht.
 

Aucass

Mitglied
Nimm das return raus ;) Sonst returned die Funktion und die Schleife wird verlassen.
Ja, das dachte ich mir auch! Funktioniert an sich auch, aber nun gibt er mir selbst die richtige Eingabe als falsch aus :D
Hier nochmal mein aktueller Code:
Java:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JOptionPane;

public class Zeitenrechner {

   public static void main(String[] args) throws ParseException {
      DateFormat df = new SimpleDateFormat("HHmm#");
      Date datum1 = null;
      Date datum2 = null;
     
         while (true){
         try {
             String zeit1 = JOptionPane.showInputDialog( null, "Beginn: (HHMM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
             datum1 = df.parse(zeit1);
             break;
         } catch (ParseException e) {
             JOptionPane.showMessageDialog( null,"Ungültige Eingabe! \nFormat beachten!" );
         }
         }     
    try {
         String zeit2 = JOptionPane.showInputDialog( null, "Ende: (HHMM) ", "Zeitenberechnunug", JOptionPane.PLAIN_MESSAGE);
         datum2 = df.parse(zeit2);
    } catch (ParseException e) {
         JOptionPane.showMessageDialog(null, "Ungültige Eingabe" );
    return;
    }
     
     
    long dif = datum2.getTime()- datum1.getTime();
       long dif2 = dif/1000/60;             
           
       if (dif2 <175){
             JOptionPane.showMessageDialog(null,"Zeit nicht erfüllt! \n" + dif2 +" Minuten von 175 Minuten!");
        }
     
       else if  (dif2 >175){
             JOptionPane.showMessageDialog(null,"Zeit erfüllt! \n" + dif2 +" Minuten von 175 Minuten!");
       }
    }
}

Danke für eure Geduld. Aller Anfang ist schwer :D
 

Aucass

Mitglied
Okay, danke!
Habe es mir mal angeguckt, aber nach 3 Tagen Java brauche ich einfach etwas mehr Erfahrung.

Ich gebe mich vorerst damit zufrieden, dass die Anzahl der Zeichen nicht begrenzt ist.
Aber trotzdem funktioniert, soweit alles! Danke :)
 

Bitfehler

Bekanntes Mitglied
Ich habe auch noch eine kleine Anmerkung:
  • Wenn dif2 gleich 175 ist, muss dann nicht auch etwas passieren. So habe ich das zumindest im ersten Post verstanden. Aktuell werden nur die Wertebereiche unter und über 175 behandelt.
 

Joose

Top Contributor
Java:
         while (true){
Nur als Hinweis: Man sollte solche Endlosschleifen vermeiden und immer eine Abbruchbedingung definieren!
Bei kleinen Probe-/Test-/Übungsprogrammen natürlich akzeptabel ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Klassen Ungültige Objektzustände bei der Initialisierung Java Basics - Anfänger-Themen 2
m0n4ch Variablen String auf ungültige Zeichen überprüfen Java Basics - Anfänger-Themen 13
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
K Eingaben in Array ausgeben Java Basics - Anfänger-Themen 3
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
R struktogramm eingaben Java Basics - Anfänger-Themen 4
D Summe von Eingaben in einer for Schleife Java Basics - Anfänger-Themen 4
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
M Erste Schritte Eingaben in ein Array packen Java Basics - Anfänger-Themen 5
M Maskierte Eingaben in der Konsole? Java Basics - Anfänger-Themen 3
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
H JTable: Eingaben mit ENTER übernehmen Java Basics - Anfänger-Themen 2
B Eingaben verwerten Java Basics - Anfänger-Themen 7
Haave EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern Java Basics - Anfänger-Themen 3
S Eingaben über die Konsole Java Basics - Anfänger-Themen 2
Obit Eingaben aus GUI auslesen Java Basics - Anfänger-Themen 10
J Regelmäßige Eingaben: Unresolved compilation problem? Java Basics - Anfänger-Themen 7
M Scanner String Eingaben ignorieren Java Basics - Anfänger-Themen 4
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
A JTable nimmt eingaben von tastatur nicht an? Java Basics - Anfänger-Themen 2
D Klasse zum Auslesen von Eingaben Java Basics - Anfänger-Themen 2
L Gelöst: Negative Eingaben sollen verweigert werden Java Basics - Anfänger-Themen 3
M Dynamische Wertsetzung von Variablen durch Eingaben Java Basics - Anfänger-Themen 9
R Eingaben Java Basics - Anfänger-Themen 5
M Verdeckung von Eingaben Java Basics - Anfänger-Themen 3
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
G Webapplikation mit JSP und Beans - Eingaben sichern, wie? Java Basics - Anfänger-Themen 11
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
D Nochmal zu den dummen Eingaben über Tastatur Java Basics - Anfänger-Themen 15
P Boolean Eingaben Java Basics - Anfänger-Themen 6
G Probleme mit Eingaben Java Basics - Anfänger-Themen 10
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
A Innerhalb eines ActionEvents Eingaben tätigen Java Basics - Anfänger-Themen 23
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
B Tastatur eingaben abfragen und dann in Argumente zerlegen..? Java Basics - Anfänger-Themen 8
F Kann mir jemand bei dem Fehler helfen? Java Basics - Anfänger-Themen 6
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
E Matrizenmultiplikation Fehler Java Basics - Anfänger-Themen 0
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
C SwingWorker mit Fehler Java Basics - Anfänger-Themen 2
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
ohneInformatik; Dynamische Zinsen. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
Fiedelbambu deriveFont Fehler wer kann Helfen? Java Basics - Anfänger-Themen 4
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
D Datentypen LocalDate.parse() ergibt Fehler Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
L Ich weis nicht was der Fehler ist! Java Basics - Anfänger-Themen 14
L30nS JNI Fehler, JRE und JDK Java Basics - Anfänger-Themen 8
E Executable jar file fehler Java Basics - Anfänger-Themen 9
S Fehler beim Programm Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
J Syntax-Fehler? Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
I Fehler bei for-Schleife Java Basics - Anfänger-Themen 6
lol5443 Tic Tac Toe Fehler Java Basics - Anfänger-Themen 5
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
J Fehler bei array aus anderer Klasse Java Basics - Anfänger-Themen 3
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
Lion.King Fehler Java Basics - Anfänger-Themen 5
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
C Fehler im Code Java Basics - Anfänger-Themen 10
J Anfänger, Fehler; "Der Hund liegt begraben" Java Basics - Anfänger-Themen 3
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
V Wer findet den Fehler :) Java Basics - Anfänger-Themen 12
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
A Compiler Fehler - not a statement Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben