Skip to content
Snippets Groups Projects
Commit 8ae35a93 authored by Dennis Eisold's avatar Dennis Eisold
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
Pipeline #129 failed with stages
in 19 seconds
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
package de.itstall;
public class Main {
public static void main(String[] args) {
TaschenrechnerGui trg = new TaschenrechnerGui();
}
}
package de.itstall;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TaschenrechnerGui extends JFrame {
JButton btnCalc = new JButton("Berechnen");
JLabel lblCalculation = new JLabel("Formel:");
JTextField txtCalculation = new JTextField();
JLabel lblResult = new JLabel();
JPanel panel;
public TaschenrechnerGui() {
this.initializeComponents();
this.anzeigen();
}
public void anzeigen() {
this.setVisible(true);
}
public void initializeComponents() {
this.setLayout(new BorderLayout());
this.setTitle("Taschenrechner");
this.setSize(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
panel = new JPanel();
panel.setLayout(new GridLayout(4, 5));
ActionListener insert = new InsertAction();
ActionListener result = new ResultAction();
ActionListener clear = new ClearAction();
txtCalculation.setBounds(20, 20, 260 ,20);
txtCalculation.setHorizontalAlignment(JTextField.RIGHT);
this.add(txtCalculation, BorderLayout.PAGE_START);
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("+", insert);
addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("-", insert);
addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("*", insert);
addButton("cls", clear);
addButton("0", insert);
addButton("=", result);
addButton("/", insert);
this.add(panel, BorderLayout.CENTER);
}
public void addButton(String label, ActionListener listener) {
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
txtCalculation.setText(txtCalculation.getText() + ((JButton) actionEvent.getSource()).getText());
}
}
private class ResultAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
txtCalculation.setText(" = " + String.valueOf(berechnen(txtCalculation.getText())));
}
}
private class ClearAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
txtCalculation.setText("");
}
}
private void calculate() {
lblResult.setText(String.valueOf(berechnen(txtCalculation.getText())));
}
/**
* Wenn der Text das Zeichen "+" enthält, sucht die Methode das erste Vorkommen von "+" und ruft
* sich selbst mit den Werten links und rechts des "+" wieder auf.
* Beispiel für die erste Rekursionsstufe: Input: 2+3+4+5
* 1. Splitten des Strings in "2" und "3+4+5"
* 2. Aufruf der Methode auf dem zweiten Teilstring, solange bis nur noch Zahlen übrig bleiben
* oder der Text leer ist. Dann werden die beiden Literale summiert und zurückgegeben.
*
* Die "Strichoperationen" ("+" und "-") müssen als erstes angesprochen werden, damit sie die letzten
* Operationen in der Rekursionsschleife sind. So erreicht man Punkt- vor Strichrechnung.
*
* Der Rückgabewert ist vom Typ Double, da Division Gleitkommazahlen ergeben kann.
*/
public static Double berechnen(String text) {
if (text.contains("+")) {
return berechnen(text.substring(0, text.indexOf("+"))) + berechnen(text.substring(text.indexOf("+")+1));
} else if (text.contains("-")) {
return berechnen(text.substring(0, text.indexOf("-"))) - berechnen(text.substring(text.indexOf("-")+1));
} else if (text.contains("*")) {
return berechnen(text.substring(0, text.indexOf("*"))) * berechnen(text.substring(text.indexOf("*")+1));
} else if (text.contains("/")) {
return berechnen(text.substring(0, text.indexOf("/"))) / berechnen(text.substring(text.indexOf("/")+1));
}
if (text.isEmpty()) return 0.0;
return Double.parseDouble(text);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment