Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Java Taschenrechner GUI
- Ersteller Hannibal Smith
- Erstellt am
- Registriert
- Apr. 2015
- Beiträge
- 1.191
Ja ich weis bei uns auf Arbeit hängt ein Tolles Schild an der Tür von unsrem Programmierer:
99 little Bugs in the Code
Patch one out
199 little Bugs in the Code
99 little Bugs in the Code
Patch one out
199 little Bugs in the Code
The Ripper
Lt. Commander
- Registriert
- Juni 2012
- Beiträge
- 1.969
Unittests und schon is nur noch halb so schlimm.
- Registriert
- Apr. 2015
- Beiträge
- 1.191
was für ein ding ?
Rossie
Rear Admiral
- Registriert
- Dez. 2010
- Beiträge
- 5.141
Um den Eingabestring zu zerlegen, könnte man einen Parser verwenden (der die Eingabe auch gleich validiert).
Wäre für einen Anfänger natürlich ein ziemliches Unterfangen. Aber es gibt fertige Beispiele, die man einbinden könnte. Z.B. https://github.com/shmatov/antlr4-calculator für die Grundrechenarten (und Klammerung!).
Bei Swing sollte man übrigens die Threading-Regel beachten (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html). Um den Swing-Code in der main()-Methode gehört ein SwingUtilities.invokeLater().
Wäre für einen Anfänger natürlich ein ziemliches Unterfangen. Aber es gibt fertige Beispiele, die man einbinden könnte. Z.B. https://github.com/shmatov/antlr4-calculator für die Grundrechenarten (und Klammerung!).
Bei Swing sollte man übrigens die Threading-Regel beachten (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html). Um den Swing-Code in der main()-Methode gehört ein SwingUtilities.invokeLater().
The Ripper
Lt. Commander
- Registriert
- Juni 2012
- Beiträge
- 1.969
Lern zu googlen...Hannibal Smith schrieb:was für ein ding ?
Sogar in deutsch anschaulich in Videoform: https://www.youtube.com/watch?v=HoTdJkc7KbQ
- Registriert
- Apr. 2015
- Beiträge
- 1.191
Soo viel Google und überlegen haben eine Lösung zugrunde gebracht die rechnet ... allerdings keine längere aufgabe und da weis ich wieder nicht mehr weiter ...
1+1 = geht
10*10 =geht
1+1+1 = geht nicht (ausgabe = 2)
1+1 = geht
10*10 =geht
1+1+1 = geht nicht (ausgabe = 2)
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Hashtable;
import java.awt.font.TextAttribute;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import Prog1Tools.IOTools;
/**
*
* Taschenrechner GUI
*
* version 1.0 vom 18.01.2018
* Johannes Brauch
*/
public class TaschenrechnerGUI extends JFrame {
// Anfang Attribute
private JTextArea TextArea1 = new JTextArea();
private JLabel lTaschenrechner = new JLabel();
private JButton eins = new JButton();
private JButton zwei = new JButton();
private JButton drei = new JButton();
private JButton vier = new JButton();
private JButton fuenf = new JButton();
private JButton sechs = new JButton();
private JButton sieben = new JButton();
private JButton acht = new JButton();
private JButton neun = new JButton();
private JButton mal = new JButton();
private JButton plus = new JButton();
private JButton minus = new JButton();
private JButton durch = new JButton();
private JButton gleich = new JButton();
private JButton zero = new JButton();
private JLabel Ausgabe = new JLabel();
// Ende Attribute
ScriptEngineManager mgr= new ScriptEngineManager();
ScriptEngine engine= mgr.getEngineByName("JavaScript");
String foo=("");
public TaschenrechnerGUI() {
// Frame-Initialisierung
super();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 279;
int frameHeight = 319;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("TaschenrechnerGUI");
setResizable(true);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
lTaschenrechner.setBounds(32, 0, 227, 27);
lTaschenrechner.setText("Taschenrechner");
Hashtable<TextAttribute, Object> lTaschenrechner_map = new Hashtable<TextAttribute, Object>();
lTaschenrechner_map.put(TextAttribute.FAMILY, "Arial Black");
lTaschenrechner_map.put(TextAttribute.SIZE, 22);
lTaschenrechner_map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
lTaschenrechner.setFont(new Font(lTaschenrechner_map));
lTaschenrechner.setForeground(Color.BLACK);
lTaschenrechner.setOpaque(false);
lTaschenrechner.setHorizontalAlignment(SwingConstants.CENTER);
lTaschenrechner.setHorizontalTextPosition(SwingConstants.CENTER);
cp.add(lTaschenrechner);
eins.setBounds(8, 160, 33, 33);
eins.setText("1");
eins.setMargin(new Insets(2, 2, 2, 2));
eins.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
eins_ActionPerformed(evt);
}
});
cp.add(eins);
zwei.setBounds(48, 160, 33, 33);
zwei.setText("2");
zwei.setMargin(new Insets(2, 2, 2, 2));
zwei.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
zwei_ActionPerformed(evt);
}
});
cp.add(zwei);
drei.setBounds(88, 160, 33, 33);
drei.setText("3");
drei.setMargin(new Insets(2, 2, 2, 2));
drei.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
drei_ActionPerformed(evt);
}
});
cp.add(drei);
vier.setBounds(8, 200, 33, 33);
vier.setText("4");
vier.setMargin(new Insets(2, 2, 2, 2));
vier.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
vier_ActionPerformed(evt);
}
});
cp.add(vier);
fuenf.setBounds(48, 200, 33, 33);
fuenf.setText("5");
fuenf.setMargin(new Insets(2, 2, 2, 2));
fuenf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
fuenf_ActionPerformed(evt);
}
});
cp.add(fuenf);
sechs.setBounds(88, 200, 33, 33);
sechs.setText("6");
sechs.setMargin(new Insets(2, 2, 2, 2));
sechs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
sechs_ActionPerformed(evt);
}
});
cp.add(sechs);
sieben.setBounds(8, 240, 33, 33);
sieben.setText("7");
sieben.setMargin(new Insets(2, 2, 2, 2));
sieben.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
sieben_ActionPerformed(evt);
}
});
cp.add(sieben);
acht.setBounds(48, 240, 33, 33);
acht.setText("8");
acht.setMargin(new Insets(2, 2, 2, 2));
acht.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
acht_ActionPerformed(evt);
}
});
cp.add(acht);
neun.setBounds(88, 240, 33, 33);
neun.setText("9");
neun.setMargin(new Insets(2, 2, 2, 2));
neun.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
neun_ActionPerformed(evt);
}
});
cp.add(neun);
mal.setBounds(136, 160, 33, 33);
mal.setText("X");
mal.setMargin(new Insets(2, 2, 2, 2));
mal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
mal_ActionPerformed(evt);
}
});
cp.add(mal);
plus.setBounds(136, 200, 33, 33);
plus.setText("+");
plus.setMargin(new Insets(2, 2, 2, 2));
plus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
plus_ActionPerformed(evt);
}
});
cp.add(plus);
minus.setBounds(136, 240, 33, 33);
minus.setText("-");
minus.setMargin(new Insets(2, 2, 2, 2));
minus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
minus_ActionPerformed(evt);
}
});
cp.add(minus);
durch.setBounds(136, 120, 33, 33);
durch.setText("/");
durch.setMargin(new Insets(2, 2, 2, 2));
durch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
durch_ActionPerformed(evt);
}
});
cp.add(durch);
gleich.setBounds(48, 120, 73, 33);
gleich.setText("=");
gleich.setMargin(new Insets(2, 2, 2, 2));
gleich.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
gleich_ActionPerformed(evt);
}
});
gleich.setForeground(Color.BLACK);
cp.add(gleich);
zero.setBounds(8, 120, 33, 33);
zero.setText("0");
zero.setMargin(new Insets(2, 2, 2, 2));
zero.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
zero_ActionPerformed(evt);
}
});
zero.setForeground(Color.BLACK);
cp.add(zero);
Ausgabe.setBounds(8, 40, 299, 65);
Ausgabe.setText("");
Ausgabe.setForeground(Color.BLACK);
Ausgabe.setFont(new Font("Arial", Font.BOLD, 28));
cp.add(Ausgabe);
// Ende Komponenten
setVisible(true);
} // end of public TaschenrechnerGUI
// Anfang Methoden
public static void main(String[] args) {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // Windows Theme
} catch(Exception e) {
}
new TaschenrechnerGUI();
//ScriptEngineManager mgr= new ScriptEngineManager();
//ScriptEngine engine= mgr.getEngineByName("JavaScript");
//String foo=("0");
//System.out.println(engine.eval(foo));
} // end of main
public void eins_ActionPerformed(ActionEvent evt) {
foo = foo.concat("1");
Ausgabe.setText(foo);
} // end of eins_ActionPerformed
public void zwei_ActionPerformed(ActionEvent evt) {
foo = foo.concat("2");
Ausgabe.setText(foo);
} // end of zwei_ActionPerformed
public void drei_ActionPerformed(ActionEvent evt) {
foo = foo.concat("3");
Ausgabe.setText(foo);
} // end of drei_ActionPerformed
public void vier_ActionPerformed(ActionEvent evt) {
foo = foo.concat("4");
Ausgabe.setText(foo);
} // end of vier_ActionPerformed
public void fuenf_ActionPerformed(ActionEvent evt) {
foo = foo.concat("5");
Ausgabe.setText(foo);
} // end of fuenf_ActionPerformed
public void sechs_ActionPerformed(ActionEvent evt) {
foo = foo.concat("6");
Ausgabe.setText(foo);
} // end of sechs_ActionPerformed
public void sieben_ActionPerformed(ActionEvent evt) {
foo = foo.concat("7");
Ausgabe.setText(foo);
} // end of sieben_ActionPerformed
public void acht_ActionPerformed(ActionEvent evt) {
foo = foo.concat("8");
Ausgabe.setText(foo);
} // end of acht_ActionPerformed
public void neun_ActionPerformed(ActionEvent evt) {
foo = foo.concat("9");
Ausgabe.setText(foo);
} // end of neun_ActionPerformed
public void mal_ActionPerformed(ActionEvent evt) {
foo = foo.concat(" * ");
Ausgabe.setText(foo);
} // end of mal_ActionPerformed
public void plus_ActionPerformed(ActionEvent evt) {
foo = foo.concat(" + ");
Ausgabe.setText(foo);
} // end of plus_ActionPerformed
public void minus_ActionPerformed(ActionEvent evt) {
foo = foo.concat(" - ");
Ausgabe.setText(foo);
} // end of minus_ActionPerformed
public void durch_ActionPerformed(ActionEvent evt) {
foo = foo.concat(" / ");
Ausgabe.setText(foo);
} // end of durch_ActionPerformed
public void gleich_ActionPerformed(ActionEvent evt) {
foo = foo.concat(" = ");
Ausgabe.setText(foo);
double ergebnis= 0;
String[] parts = foo.split(" ");
for (int i=0;i<parts.length; i++) {
//+-/* operator
String c_part = parts[i];
if (c_part.equals("+")) {
//System.out.println("Plus gefunden");
ergebnis= Double.parseDouble(parts[i-1]) + Double.parseDouble(parts[i+1]);
} // end of if
if (c_part.equals("-")) {
//System.out.println("Minus gefunden");
ergebnis= Double.parseDouble(parts[i-1]) - Double.parseDouble(parts[i+1]);
} // end of if
if (c_part.equals("*")) {
//System.out.println("Mal gefunden");
ergebnis= Double.parseDouble(parts[i-1]) * Double.parseDouble(parts[i+1]);
} // end of if
if (c_part.equals("/")) {
//System.out.println("Durch gefunden");
ergebnis= Double.parseDouble(parts[i-1]) / Double.parseDouble(parts[i+1]);
} // end of if
} // end of for
Ausgabe.setText(String.valueOf(ergebnis));
} // end of gleich_ActionPerformed
public void zero_ActionPerformed(ActionEvent evt) {
foo = foo.concat("0");
Ausgabe.setText(foo);
} // end of zero_ActionPerformed
// Ende Methoden
} // end of class TaschenrechnerGUI
Und dir ist auch klar, warum das Ergebnis falsch ist? Wenn nicht, hast du zu viel gegooglet/kopiert und zu wenig verstanden.
Es ist aber gewollt, dass der Rechner stur von links nach rechts rechnet? Oder kommt das mit der nächsten Version?
Außerdem google mal nach ActionCommand. Damit kannst du deinen Code um 1/3 reduzieren. Da kriegt man ja Augenkrebs von.
Es ist aber gewollt, dass der Rechner stur von links nach rechts rechnet? Oder kommt das mit der nächsten Version?
Außerdem google mal nach ActionCommand. Damit kannst du deinen Code um 1/3 reduzieren. Da kriegt man ja Augenkrebs von.
- Registriert
- Aug. 2009
- Beiträge
- 3.904
Ich würde mich erstmal mit Blatt und Papier hinsetzen und überlegen in welchen Schritten man eine simple mathematische Aufgabe logisch aufteilt. Und das versuchen in Code zu übersetzen.
Aktuell berücksichtigst du immer nur die Zahl vor und nach einem Rechenschritt und überschreibst das Ergebnis.
Aktuell berücksichtigst du immer nur die Zahl vor und nach einem Rechenschritt und überschreibst das Ergebnis.
Ähnliche Themen
- Antworten
- 20
- Aufrufe
- 1.290
- Antworten
- 67
- Aufrufe
- 5.441
- Antworten
- 10
- Aufrufe
- 724
- Antworten
- 15
- Aufrufe
- 2.016