JOptionPane OK ohne Eingabe abfangen

AnRi

Mitglied
Hallo zusammen,

ich stehe noch am Anfang der Java Programmierung und stehe gerade total auf den Schlauch.
Wenn ich JOptionPane.showInputDialog den Dialog mit OK bestätige, ohne eine Eingabe zu machen, weis ich nicht wie ich das abfangen kann.
Die Option Abbrechen kann ich mit prüfen auf null abfangen, aber OK?
Auf welchen Wert prüfe ich da?
 

AnRi

Mitglied
Ich muss einen Taschenrechner programmieren, ich brauche das nicht für die Aufgabenstellung, will aber mir angewöhnen
alle möglichen Fehler abzufangen.
Ich glaube ich setze das isEmpty() falsch ein.
Java:
while (weiter == false) {
            eingabe = JOptionPane.showInputDialog("Wählen sie die Rechenoperation:\na = addition(+)\nb = substraktion(-)"
                    + "\nc = division(/)\nd multiplikation(*)");
            if (eingabe == null) {
                System.out.println("Sie haben die Eingabe abgebrochen, starten sie das Programm neu.");
                System.exit(0);
            }else
                if (eingabe.isEmpty()) {
                    weiter = true;
                    System.out.println("Sie haben keine gültige Auswahl getroffen, bitte wiederholen!");
                }
        }
 

Neumi5694

Top Contributor
Das isEmpty ist schon ok, was du dann aber machst, ist das Problem.
Du setzt dann weiter auf true, willst aber die Schleife wiederholen lassen, wenn weiter false ist.

Hier haben wir einen klaren Fall eines schlecht gewählten Variablennamens.
In der Schleife heißt "weiter", dass noch keine gültige Auswahl getroffen wurde.
In der isEmpty auswertung wird weiter so behandelt, dass es bedeutet, die Eingabe zu wiederholen.

Benenn die Variable mal um nach eingabeWarGueltig (wenn wir schon deutsche Variablen verwenden), dann wird dir klar, wann du sie wie setzen musst.

ps: (weiter == false) ist das Gleiche wie (!weiter)
Boolean Variablen sollte man niemals niemals mit true oder false vergleichen, das Ergebnis des Vergleichs ist ja eh wieder Boolean.
 

Jw456

Top Contributor
weiter = true; ist das wiklich richtig wenn du weiter in der Schleife bleiben willst
 
Zuletzt bearbeitet:

AnRi

Mitglied
Ich will auch gerade nur verstehen wie ich den Fehler abfange.
Es ist nicht mal die Aufgabe, aber ich will das von Anfang machen um es mir an zu gewöhnen.
Ich stell mal den ganzen code ein.
Erste und zweite Eingabe ist gar kein Problem, ich kriege es nur nicht bei der dritten Eingabe für die Abfrage der Auswahl hin.

Java:
import javax.swing.*; //für die Eingabe

public class Java_Aufgabe_4_Rechenoperationen {
    //Alle Methoden mit double, damit auch Komastellen gerechnet und angegeben werden.
    static void addition(double a, double b) {
        System.out.println(a + " + " + b + " = " + (a + b));
    }
   
    static void substraktion (double a, double b) {
        System.out.println(a + " - " + b + " = " + (a - b));
    }
   
    static void division(double a, double b) {
        System.out.println(a + " / " + b + " = " + (a / b));
    }
   
    static void multiplikation(double a, double b) {
        System.out.println(a + " * " + b + " = " + (a * b));
    }

    public static void main(String[] args) {
        double wert1, wert2;
        wert1 = 0;
        wert2 = 0;
        String eingabe = " ";
        char auswahl = ' ';
        boolean weiter = false;
       
        //Abfragen der Zahl zur Berechnung
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr erste Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert1 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
           
        }
        weiter = false;
        //Abfragen der zweiten Zahl zur Berechnung
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr zweite Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert2 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
           
        }
        weiter = false; //FlagVariable auf false setzen.
        do {
            eingabe = JOptionPane.showInputDialog("Wählen sie die Rechenoperation:\na = addition(+)\nb = substraktion(-)"
                    + "\nc = division(/)\nd multiplikation(*)");
            if (eingabe == null) { //Abbrechen abfangen bei Eingabedialog.
                System.out.println("Sie haben die Eingabe abgebrochen, starten sie das Programm neu.");
                System.exit(0);
            }else
                if (eingabe.isEmpty()) { //Abfangen bei Auswahl OK ohne Eingabe.
                    weiter = true; //FlagVariable auf true zur wiederholung der Schleife.
                    System.out.println("Sie haben keine gültige Auswahl getroffen, bitte wiederholen!");
                }
        } while (weiter == false); //Schleife wiederholen wenn weiter nicht false ist.
       
        auswahl = eingabe.charAt(0);
        switch(auswahl) {
        case 'a':
            addition(wert1, wert2);
            break;
        case 'b':
            substraktion(wert1, wert2);
            break;
        case 'c':
            division(wert1, wert2);
            break;
        case 'd':
            multiplikation(wert1, wert2);
            break;
            default:
                System.out.println("Sie haben keine gültige eingabe getroffen!");
        }
        System.exit(0);

    }

}
 

AnRi

Mitglied
Habe es gelöst, war echt ein Gedankenfehler.
So gehts... Danke für eure Hilfe!
Java:
import javax.swing.*; //für die Eingabe

public class Java03C_Einsendeaufgabe_3_4 {
    //Alle Methoden mit double, damit auch Komastellen gerechnet und angegeben werden.
    static void addition(double a, double b) {
        System.out.println(a + " + " + b + " = " + (a + b));
    }
  
    static void substraktion (double a, double b) {
        System.out.println(a + " - " + b + " = " + (a - b));
    }
  
    static void division(double a, double b) {
        System.out.println(a + " / " + b + " = " + (a / b));
    }
  
    static void multiplikation(double a, double b) {
        System.out.println(a + " * " + b + " = " + (a * b));
    }

    public static void main(String[] args) {
        double wert1, wert2;
        wert1 = 0;
        wert2 = 0;
        String eingabe = " ";
        char auswahl = ' ';
        boolean weiter = false;
      
        //Abfragen der Zahl zur Berechnung
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr erste Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert1 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
          
        }
        weiter = false;
        //Abfragen der zweiten Zahl zur Berechnung
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr zweite Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert2 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
          
        }     
        do {
            weiter = true; //FlagVariable auf true setzen.
            eingabe = JOptionPane.showInputDialog("Wählen sie die Rechenoperation:\na = addition(+)\nb = substraktion(-)"
                    + "\nc = division(/)\nd multiplikation(*)");
            if (eingabe == null) { //Abbrechen abfangen bei Eingabedialog.
                System.out.println("Sie haben die Eingabe abgebrochen, starten sie das Programm neu.");
                System.exit(0);
            }else
                if (eingabe.isEmpty()) { //Abfangen bei Auswahl OK ohne Eingabe.
                    weiter = false; //FlagVariable auf false zur wiederholung der Schleife.
                    System.out.println("Sie haben keine gültige Auswahl getroffen, bitte wiederholen!");
                }
        } while (weiter == false); //Schleife wiederholen wenn weiter false ist.
      
        auswahl = eingabe.charAt(0);
        switch(auswahl) {
        case 'a':
            addition(wert1, wert2);
            break;
        case 'b':
            substraktion(wert1, wert2);
            break;
        case 'c':
            division(wert1, wert2);
            break;
        case 'd':
            multiplikation(wert1, wert2);
            break;
            default:
                System.out.println("Sie haben keine gültige eingabe getroffen!");
        }
        System.exit(0);

    }

}
 

MarvinsDepression

Bekanntes Mitglied
eingabe = JOptionPane.showInputDialog("Geben Sie ihr erste Zahl für die Rechnung ein.");
Ich verstehe nicht, welcher Fehler da abgefangen werden soll.
Ich würde ja vermuten, dass nach dieser Zuweisung eingabe immer ungleich null ist. Im Extemfall wir halt ein leerer String zurück gegeben, weil der Rückgabe-Typ eben String ist. Es wird auch nichts geparst, wo eine Ausnahme geworfen werden könnte. Liege ich da falsch?
 

mihe7

Top Contributor
//Abfragen der Zahl zur Berechnung
Ich liebe diese Kommentare, die für eine Methode stehen :p

Wenn Du Dir die beiden Blöcke

Java:
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr erste Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert1 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
          
        }

und

Java:
        while (weiter == false) { //bei gelingen wird weiter auf true geändert und die Schleife endet.
            eingabe = JOptionPane.showInputDialog("Geben Sie ihr zweite Zahl für die Rechnung ein.");
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                wert2 = Double.parseDouble(eingabe);
                weiter = true;
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
          
        }

anschaust, dann wirst Du feststellen, dass sich diese nur an einer Stelle unterscheiden: dem String, der den Benutzer zur Eingabe auffordert. Das schreit förmlich danach, ausgelagert zu werden:

Java:
private static double frageNachDouble(String prompt) {
        while (true) {
            String eingabe = JOptionPane.showInputDialog(prompt);
            if (eingabe == null) { //Auf Abbrechen prüfen.
                System.out.println("Sie haben die Eingabe abgebrochen, einen schönen Tag!");
                System.exit(0);
            }
            try { //Prüfung ob sich eingabe in einen double Wert umwandeln lässt.
                return Double.parseDouble(eingabe);
            } catch(NumberFormatException e) {
                System.out.println("Ihre Eingabe war nicht gültig bitte wiederholen...");
            }
        }    
}

Dadurch reduziert sich Dein Code in main schon einmal erheblich:
Java:
        double wert1 = frageNachDouble("Geben Sie ihr erste Zahl für die Rechnung ein.");
        double wert2 = frageNachDouble("Geben Sie ihr zweite Zahl für die Rechnung ein.");
        // ...

Analog kannst Du das für den dritten Block auch machen. Außerdem könnte man sich ansehen, ob man in den Blöcken nicht noch mehr Gemeinsamkeiten findet...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing JOptionPane ohne beep AWT, Swing, JavaFX & SWT 6
eskimo328 JOptionPane ohne CANCEL Button AWT, Swing, JavaFX & SWT 2
G JOptionPane zeigt nicht an was ich will AWT, Swing, JavaFX & SWT 2
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
J JOptionPane return bei "Abbrechen" AWT, Swing, JavaFX & SWT 13
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
O Swing JOptionPane.showOptionDialog - Wie kann ich Buttons größer machen AWT, Swing, JavaFX & SWT 10
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing JOptionPane import AWT, Swing, JavaFX & SWT 5
R Swing JOptionPane Sprache Ändern AWT, Swing, JavaFX & SWT 4
O JOptionPane mit JFileDialog AWT, Swing, JavaFX & SWT 5
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
I JOptionPane maximale Zeichen einstellen AWT, Swing, JavaFX & SWT 2
N Swing Mocken von JOptionPane im JUnit-Test AWT, Swing, JavaFX & SWT 3
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
W JOptionPane AWT, Swing, JavaFX & SWT 1
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
snipesss Hintergrundbild in JOptionPane.showInputDialog? AWT, Swing, JavaFX & SWT 4
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
A Swing JOptionPane.showConfirmDialog, EventQueue wird weiter abgearbeitet AWT, Swing, JavaFX & SWT 2
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T JOptionPane Enter = Okay AWT, Swing, JavaFX & SWT 3
OnDemand JOptionPane AWT, Swing, JavaFX & SWT 2
B JFrame wie JOptionPane.showMessageDialog() AWT, Swing, JavaFX & SWT 2
D Swing JOptionPane verschwindet beim 2. Aufruf einfach so?? AWT, Swing, JavaFX & SWT 2
L Swing JOptionPane Verwirrung AWT, Swing, JavaFX & SWT 13
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
I javascript in javaprogramm JOptionpane -> haengt (embedded Interpreter) AWT, Swing, JavaFX & SWT 2
S JOptionPane sinnvoll benutzen AWT, Swing, JavaFX & SWT 7
J JOptionPane mit zwei Buttons?! AWT, Swing, JavaFX & SWT 3
D JOptionPane.QUESTION_MESSAGE Fett darstellen AWT, Swing, JavaFX & SWT 4
N JOptionPane als JWindow AWT, Swing, JavaFX & SWT 2
M Swing Änderungen eines TextFelds und JOptionPane AWT, Swing, JavaFX & SWT 5
O JOptionPane.showMessageDialog mit automatischem Zeilenumbruch AWT, Swing, JavaFX & SWT 9
E Swing setCaretPosition für ein JTextField in einem JOptionPane AWT, Swing, JavaFX & SWT 3
H Swing JOptionPane.showConfirmMessage() wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
R JOptionPane.YES_NO_CANCEL_OPTION im SaveDialog verwenden AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
R Eingegebenen Text in JOptionPane in andere Klasse weitergeben AWT, Swing, JavaFX & SWT 2
M JOptionPane.showInputDialog abbrechen abfangen? AWT, Swing, JavaFX & SWT 2
Weiti JOptionPane aus einer von JPanel abgeleiteten Klasse aufrufen AWT, Swing, JavaFX & SWT 3
N OK-Button in JOptionPane ansprechen AWT, Swing, JavaFX & SWT 5
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
G Swing Meldung mit joptionpane information message AWT, Swing, JavaFX & SWT 22
A Swing \t im JOptionPane AWT, Swing, JavaFX & SWT 2
G JOptionPane.showConfirmDialog size problem AWT, Swing, JavaFX & SWT 3
S JOptionPane - InitialValue AWT, Swing, JavaFX & SWT 9
S JOptionPane resultat kriegen AWT, Swing, JavaFX & SWT 7
ABstraCT JOptionPane setSize ? AWT, Swing, JavaFX & SWT 6
S JOptionPane.showInputDialog JList erzwingen? AWT, Swing, JavaFX & SWT 4
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
A Array wird im JOptionPane mehrfach ausgegeben AWT, Swing, JavaFX & SWT 3
A JOptionPane soll auf Enter reagieren AWT, Swing, JavaFX & SWT 4
F JOptionPane.showMessageDialog AWT, Swing, JavaFX & SWT 2
M JOptionPane.showMessageDialog() mit printStackTace() ? AWT, Swing, JavaFX & SWT 7
QDog JTabbedPane JOptionPane AWT, Swing, JavaFX & SWT 2
K Tabelle nach JOptionPane updaten AWT, Swing, JavaFX & SWT 5
A JOptionPane; CLOSED_OPTION ausschalten AWT, Swing, JavaFX & SWT 5
A Probleme mit einer JOptionPane in einem jar-File AWT, Swing, JavaFX & SWT 14
Z JOptionPane mit einer Methode in dem Vordergrund setzen? AWT, Swing, JavaFX & SWT 6
J JOptionPane Tabs AWT, Swing, JavaFX & SWT 3
G JOptionPane mit andere Farbe AWT, Swing, JavaFX & SWT 8
B Ein JOptionPane.showMessageDialog(.) AWT, Swing, JavaFX & SWT 6
G komplexes JOptionPane (oder doch JFrame?) AWT, Swing, JavaFX & SWT 2
G JOptionPane mit link zum anklicken AWT, Swing, JavaFX & SWT 4
G JOptionPane AWT, Swing, JavaFX & SWT 6
N Probleme mit eigenem JOptionPane AWT, Swing, JavaFX & SWT 2
A Schließen eines JOptionPane.showConfirmDialog AWT, Swing, JavaFX & SWT 6
B JOptionPane.showInputDialog mit drei ComboBoxen nebeneinande AWT, Swing, JavaFX & SWT 2
S JTextField und JOptionPane - Zeicheneingabe beschränken AWT, Swing, JavaFX & SWT 3
G JOptionPane AWT, Swing, JavaFX & SWT 3
M JOptionPane.showConfirmDialog. Frage zur Cancel_Option AWT, Swing, JavaFX & SWT 2
L JOptionPane AWT, Swing, JavaFX & SWT 4
P JComboBox.addItem erzeugt Layoutproblem mit JOptionPane AWT, Swing, JavaFX & SWT 2
J eigenes JOptionPane ? AWT, Swing, JavaFX & SWT 2
J JOptionPane Buttons AWT, Swing, JavaFX & SWT 4
G Eingabe auslesen mit JOptionPane AWT, Swing, JavaFX & SWT 2
vogella JOptionPane in den Vordergrund bringen AWT, Swing, JavaFX & SWT 2
padde479 JOptionPane AWT, Swing, JavaFX & SWT 3
C Probleme beim Serialisieren mit JOptionPane AWT, Swing, JavaFX & SWT 12
S JOptionPane: methode ShowConfirmDialog ist undefiniert AWT, Swing, JavaFX & SWT 2
S JOptionPane und eine feste Zeilenbreite. AWT, Swing, JavaFX & SWT 4
S JProgressBar zu JOptionPane hinzufügen. AWT, Swing, JavaFX & SWT 8
G JOptionPane AWT, Swing, JavaFX & SWT 3
B Eingabeüberprüfung beim JOptionPane.showInputDialog() AWT, Swing, JavaFX & SWT 3
D Mit JOptionPane einen Link darstellen AWT, Swing, JavaFX & SWT 10
S JOptionPane.showMessageDialog(.) AWT, Swing, JavaFX & SWT 23
S Ein frage zu JOptionPane AWT, Swing, JavaFX & SWT 2
H wie frage ich mehrere buttons von joptionpane ab AWT, Swing, JavaFX & SWT 4
G Link in JoptionPane? AWT, Swing, JavaFX & SWT 3
N JOptionPane mit Html Tags AWT, Swing, JavaFX & SWT 5
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
M Ausgabe mit JOptionPane AWT, Swing, JavaFX & SWT 6
U kleiner-Zeichen JEditorPanel (war: JOptionPane) AWT, Swing, JavaFX & SWT 5
S JOptionPane in den Bildschirmvordergrund bringen AWT, Swing, JavaFX & SWT 3
F JOptionPane soll nicht auf ENTER reagieren AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben