Taschenrechner GUI Problem mit Fehlerhandling

eiligerwind

Mitglied
Hallo Zusammen,

ich habe die Aufgabe einen Taschenrechner umzustellen, so dass dieser mit einer JComboBox (vorher Radiobuttons) direkt nach Auswahl verschieden Rechenoperationen ausführen soll. Das funktioniert mittlerweile auch einigermaßen. Allerdings scheint mein abfangen von diversen Falscheingaben nicht zu funktionieren. In der Methode berechnen() ist folgendes hinterlegt:

[CODE lang="java" title="Methode berechnen()"]private String berechnen() {
//ergebnis muss initialisiert werden
int zahl1, zahl2, ergebnis = 0;
boolean fehlerFlag = false;

if (eingabe1.getText().isEmpty()) {
zahl1 = 0;
eingabe1.setText("0");
}
else
zahl1 = Integer.parseInt(eingabe1.getText());
if (eingabe2.getText().isEmpty()) {
zahl2 = 0;
eingabe2.setText("0");
}
else
zahl2 = Integer.parseInt(eingabe2.getText());

//welche Operation ist ausgewählt?
//Die Rechenoperation wird direkt über den Index das Arrays abgefragt
if (auswahl.getSelectedIndex() == 0)
ergebnis = zahl1 + zahl2;
if (auswahl.getSelectedIndex() == 1)
ergebnis = zahl1 - zahl2;
if (auswahl.getSelectedIndex() == 2)
ergebnis = zahl1 * zahl2;
//bei der Division überprüfen wir den zweiten Wert auf 0
if (auswahl.getSelectedIndex() == 3) {
if (zahl2 != 0)
ergebnis = zahl1 / zahl2;
else
fehlerFlag = true;
}
//wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurück
if (fehlerFlag == false) {

//das Format anwenden, das Ergebnis ist eine Zeichenkette
return (Integer.toString(ergebnis));
}
else
return ("Nicht definiert");
}
[/CODE]

dennoch werden keine Eingaben nicht wie erwartet mit "0" gesetzt... auch eine Division durch 0 bringt nicht den erwarteten Text ("Nicht definiert")

was mache ich da falsch?

vielen Dank und VG

eiligerwind
 
Könntest du etwas mehr von der GUI zeigen?
Und du brauchst mind. eine Ausnahmebehandlung, einen fehler Flag gibt es in Java nicht...
 
@Best Goalkeeper: danke für Deine Antwort...habe den Fehler zwischenzeitlich lösen können. Es war nicht die Methode, sondern ich habe in der Mainmethode eine falsche GUI angesprochen...das kommt davon wenn man wild hin und her kopiert...Der Compiler ist nie in die Methode gesprungen...
 
calculator.JPG
[CODE lang="java" title="Calculator" highlight="53"]import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class CalculatorPanel extends JPanel implements ActionListener {
static final int ADD = 0;
static final int SUB = 1;
static final int MUL = 2;
static final int DIV = 3;
private JComboBox<String> operations = new JComboBox<String>(new String[] { "+", "-", "*", "/" });
private JTextField[] values = new JTextField[2];
private JButton result = new JButton();

public CalculatorPanel(int width, int fontSize) {
setPreferredSize(new Dimension(width, fontSize * 2));
Font font = new Font("Arial", Font.BOLD, fontSize);
add(operations);
operations.setFont(font);
Dimension dim = new Dimension(getPreferredSize().width / 4, (int) (fontSize * 1.5));
for (int i = 0; i < 2; i++) {
values = new JTextField();
values.setDocument(new FloatDocument());
values.setPreferredSize(dim);
values.setFont(font);
values.setHorizontalAlignment(JTextField.CENTER);
add(values);
}
result.setPreferredSize(dim);
result.setFont(font);
result.setFocusable(false);
result.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
result.setBackground(Color.WHITE);
result.addActionListener(this);
add(result);
}

public void addNotify() {
super.addNotify();
SwingUtilities.getRootPane(getParent()).setDefaultButton(result);
}

@Override
public void actionPerformed(ActionEvent e) {
switch (operations.getSelectedIndex()) {
case ADD:
result.setText(add(getValues()));
break;
case SUB:
result.setText(sub(getValues()));
break;
case MUL:
result.setText(mul(getValues()));
break;
case DIV:
result.setText(div(getValues()));
break;
}
}

private String add(double[] values) {
return values[0] + values[1] + "";
}

private String div(double[] values) {
if (values[1] == 0)
return "DivByZero";
return values[0] / values[1] + "";
}

private double[] getValues() {
double[] values = new double[2];
for (int i = 0; i < this.values.length; i++) {
String val = this.values.getText();
if (val.equals(""))
val = "0";
values = Double.parseDouble(val);
}
return values;
}

private String mul(double[] values) {
return values[0] * values[1] + "";
}

private String sub(double[] values) {
return values[0] - values[1] + "";
}
}[/CODE]
 

Zurück
Oben