forked from IF-LK-2020/rechenmaschine
GUI fertig
This commit is contained in:
45
GUI.form
Normal file
45
GUI.form
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="GUI">
|
||||||
|
<grid id="27dc6" binding="panelMain" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<xy x="20" y="20" width="500" height="400"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<component id="36781" class="javax.swing.JTextField" binding="textFieldRechenterm">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="-1"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
<component id="6de4a" class="javax.swing.JButton" binding="buttonBerechnen">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Berechnen"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="4aaff" class="javax.swing.JLabel" binding="labelGibRechentermEin">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Bitte gib einen Rechenterm ein."/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="d95b1" class="javax.swing.JLabel" binding="labelErgebnis">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Ergebnis"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</form>
|
||||||
36
GUI.java
Normal file
36
GUI.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
public class GUI extends JFrame {
|
||||||
|
private JPanel panelMain;
|
||||||
|
private JTextField textFieldRechenterm;
|
||||||
|
private JLabel labelGibRechentermEin;
|
||||||
|
private JButton buttonBerechnen;
|
||||||
|
private JLabel labelErgebnis;
|
||||||
|
|
||||||
|
public GUI(String title){
|
||||||
|
super(title);
|
||||||
|
|
||||||
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
this.setContentPane(panelMain);
|
||||||
|
this.pack();
|
||||||
|
buttonBerechnen.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
//TODO: Text vom Text field zu Eingabe übergeben
|
||||||
|
Rechenmaschine rechner = new Rechenmaschine(textFieldRechenterm.getText());
|
||||||
|
labelErgebnis.setText("Das Ergebnis ist: "+rechner.getResult());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
JFrame frame = new GUI("Rechenterme");
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createUIComponents() {
|
||||||
|
// TODO: place custom component creation code here
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,39 +5,30 @@ import java.text.DecimalFormat;
|
|||||||
*/
|
*/
|
||||||
public class Rechenmaschine {
|
public class Rechenmaschine {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
new Rechenmaschine();
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Token> tokenlist;
|
private List<Token> tokenlist;
|
||||||
|
|
||||||
private String fehler;
|
private String fehler;
|
||||||
|
|
||||||
private double result;
|
private String result;
|
||||||
|
|
||||||
private int klammern;
|
private int klammern;
|
||||||
|
|
||||||
public Rechenmaschine() {
|
public Rechenmaschine(String eingabe) {
|
||||||
tokenlist = new List<>();
|
tokenlist = new List<>();
|
||||||
|
|
||||||
Scanner input = new Scanner(System.in);
|
if (!scanne(eingabe)) {
|
||||||
System.out.println("Gib einen Term ein und bestätige mit ENTER: ");
|
|
||||||
String eingabe = input.nextLine();
|
|
||||||
input.close();
|
|
||||||
|
|
||||||
if( !scanne(eingabe) ) {
|
|
||||||
System.out.println("Fehler bei der lexikalischen Analyse:");
|
System.out.println("Fehler bei der lexikalischen Analyse:");
|
||||||
System.out.println(fehler);
|
System.out.println(fehler);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !parse() ) {
|
if (!parse()) {
|
||||||
System.out.println("Fehler bei der syntaktischen Analyse:");
|
System.out.println("Fehler bei der syntaktischen Analyse:");
|
||||||
System.out.println(fehler);
|
System.out.println(fehler);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !analyse() ) {
|
if (!analyse()) {
|
||||||
System.out.println("Fehler bei der semantischen Analyse:");
|
System.out.println("Fehler bei der semantischen Analyse:");
|
||||||
System.out.println(fehler);
|
System.out.println(fehler);
|
||||||
return;
|
return;
|
||||||
@@ -47,13 +38,14 @@ public class Rechenmaschine {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean scanne( String pEingabe ) {
|
|
||||||
|
public boolean scanne(String pEingabe) {
|
||||||
char[] eingabe = pEingabe.toCharArray();
|
char[] eingabe = pEingabe.toCharArray();
|
||||||
klammern = 0;
|
klammern = 0;
|
||||||
int state = 0;
|
int state = 0;
|
||||||
StringBuilder currentToken = new StringBuilder();
|
StringBuilder currentToken = new StringBuilder();
|
||||||
for(char buchstabe: eingabe){
|
for (char buchstabe : eingabe) {
|
||||||
switch(state){
|
switch (state) {
|
||||||
case 0:
|
case 0:
|
||||||
switch (buchstabe) {
|
switch (buchstabe) {
|
||||||
case '0' -> {
|
case '0' -> {
|
||||||
@@ -73,7 +65,7 @@ public class Rechenmaschine {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case '(' -> {
|
case '(' -> {
|
||||||
tokenlist.append(new Token("PARANTHESES",Character.toString(buchstabe)));
|
tokenlist.append(new Token("PARANTHESES", Character.toString(buchstabe)));
|
||||||
state = 6;
|
state = 6;
|
||||||
klammern++;
|
klammern++;
|
||||||
}
|
}
|
||||||
@@ -89,7 +81,7 @@ public class Rechenmaschine {
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
switch (buchstabe) {
|
switch (buchstabe) {
|
||||||
case '0','1', '2', '3', '4', '5', '6', '7', '8', '9' -> {
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> {
|
||||||
System.out.println("Wenn eine 0 am anfang eines Operands ist, muss ein . folgen.");
|
System.out.println("Wenn eine 0 am anfang eines Operands ist, muss ein . folgen.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -104,9 +96,9 @@ public class Rechenmaschine {
|
|||||||
state = 5;
|
state = 5;
|
||||||
}
|
}
|
||||||
case ')' -> {
|
case ')' -> {
|
||||||
tokenlist.append(new Token("OPERAND",currentToken.toString()));
|
tokenlist.append(new Token("OPERAND", currentToken.toString()));
|
||||||
currentToken = new StringBuilder();
|
currentToken = new StringBuilder();
|
||||||
tokenlist.append(new Token("PARANTHESES",")"));
|
tokenlist.append(new Token("PARANTHESES", ")"));
|
||||||
state = 7;
|
state = 7;
|
||||||
klammern--;
|
klammern--;
|
||||||
}
|
}
|
||||||
@@ -137,9 +129,9 @@ public class Rechenmaschine {
|
|||||||
state = 5;
|
state = 5;
|
||||||
}
|
}
|
||||||
case ')' -> {
|
case ')' -> {
|
||||||
tokenlist.append(new Token("OPERAND",currentToken.toString()));
|
tokenlist.append(new Token("OPERAND", currentToken.toString()));
|
||||||
currentToken = new StringBuilder();
|
currentToken = new StringBuilder();
|
||||||
tokenlist.append(new Token("PARANTHESES",")"));
|
tokenlist.append(new Token("PARANTHESES", ")"));
|
||||||
state = 7;
|
state = 7;
|
||||||
klammern--;
|
klammern--;
|
||||||
}
|
}
|
||||||
@@ -182,9 +174,9 @@ public class Rechenmaschine {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case ')' -> {
|
case ')' -> {
|
||||||
tokenlist.append(new Token("OPERAND",currentToken.toString()));
|
tokenlist.append(new Token("OPERAND", currentToken.toString()));
|
||||||
currentToken = new StringBuilder();
|
currentToken = new StringBuilder();
|
||||||
tokenlist.append(new Token("PARANTHESES",Character.toString(buchstabe)));
|
tokenlist.append(new Token("PARANTHESES", Character.toString(buchstabe)));
|
||||||
state = 7;
|
state = 7;
|
||||||
klammern--;
|
klammern--;
|
||||||
}
|
}
|
||||||
@@ -217,7 +209,7 @@ public class Rechenmaschine {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case '(' -> {
|
case '(' -> {
|
||||||
tokenlist.append(new Token("PARANTHESES","("));
|
tokenlist.append(new Token("PARANTHESES", "("));
|
||||||
state = 6;
|
state = 6;
|
||||||
klammern++;
|
klammern++;
|
||||||
}
|
}
|
||||||
@@ -232,7 +224,7 @@ public class Rechenmaschine {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
switch(buchstabe) {
|
switch (buchstabe) {
|
||||||
case '0' -> {
|
case '0' -> {
|
||||||
currentToken.append(buchstabe);
|
currentToken.append(buchstabe);
|
||||||
state = 1;
|
state = 1;
|
||||||
@@ -242,7 +234,7 @@ public class Rechenmaschine {
|
|||||||
state = 2;
|
state = 2;
|
||||||
}
|
}
|
||||||
case '+', '-' -> {
|
case '+', '-' -> {
|
||||||
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
|
tokenlist.append(new Token("OPERATOR", Character.toString(buchstabe)));
|
||||||
state = 5;
|
state = 5;
|
||||||
}
|
}
|
||||||
case '*', '/' -> {
|
case '*', '/' -> {
|
||||||
@@ -250,7 +242,7 @@ public class Rechenmaschine {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case '(' -> {
|
case '(' -> {
|
||||||
tokenlist.append(new Token("PARANTHESES",Character.toString(buchstabe)));
|
tokenlist.append(new Token("PARANTHESES", Character.toString(buchstabe)));
|
||||||
klammern++;
|
klammern++;
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
@@ -260,17 +252,17 @@ public class Rechenmaschine {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
switch(buchstabe) {
|
switch (buchstabe) {
|
||||||
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '(' -> {
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '(' -> {
|
||||||
System.out.println("Nach ) muss ein Operator folgen");
|
System.out.println("Nach ) muss ein Operator folgen");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case '+', '-', '*', '/' -> {
|
case '+', '-', '*', '/' -> {
|
||||||
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
|
tokenlist.append(new Token("OPERATOR", Character.toString(buchstabe)));
|
||||||
state = 5;
|
state = 5;
|
||||||
}
|
}
|
||||||
case ')' -> {
|
case ')' -> {
|
||||||
tokenlist.append(new Token("PARANTHESES",Character.toString(buchstabe)));
|
tokenlist.append(new Token("PARANTHESES", Character.toString(buchstabe)));
|
||||||
klammern--;
|
klammern--;
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
@@ -282,17 +274,17 @@ public class Rechenmaschine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( state == 5 ) {
|
if (state == 5) {
|
||||||
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem Operator enden!";
|
fehler = "Fehler im Wort " + pEingabe + ":\nDas Wort darf nicht mit einem Operator enden!";
|
||||||
return false;
|
return false;
|
||||||
} else if (state == 3){
|
} else if (state == 3) {
|
||||||
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem . enden!";
|
fehler = "Fehler im Wort " + pEingabe + ":\nDas Wort darf nicht mit einem . enden!";
|
||||||
return false;
|
return false;
|
||||||
} else if (state ==6){
|
} else if (state == 6) {
|
||||||
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit ( enden!";
|
fehler = "Fehler im Wort " + pEingabe + ":\nDas Wort darf nicht mit ( enden!";
|
||||||
return false;
|
return false;
|
||||||
} else if (klammern !=0){
|
} else if (klammern != 0) {
|
||||||
fehler = "Fehler im Wort " +pEingabe+ ":\nIm wort müssen alle Klammern geschlossen sein!";
|
fehler = "Fehler im Wort " + pEingabe + ":\nIm wort müssen alle Klammern geschlossen sein!";
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
tokenlist.toLast();
|
tokenlist.toLast();
|
||||||
@@ -313,62 +305,61 @@ public class Rechenmaschine {
|
|||||||
int state = 0;
|
int state = 0;
|
||||||
|
|
||||||
tokenlist.toFirst();
|
tokenlist.toFirst();
|
||||||
while( tokenlist.hasAccess() ) {
|
while (tokenlist.hasAccess()) {
|
||||||
Token currentToken = tokenlist.getContent();
|
Token currentToken = tokenlist.getContent();
|
||||||
|
|
||||||
switch( state ) {
|
switch (state) {
|
||||||
case 0:
|
case 0:
|
||||||
if( currentToken.getType().equals("OPERATOR") ) {
|
if (currentToken.getType().equals("OPERATOR")) {
|
||||||
fehler = "Rechenterm darf nicht mit einem Operator starten!";
|
fehler = "Rechenterm darf nicht mit einem Operator starten!";
|
||||||
return false;
|
return false;
|
||||||
} else if( currentToken.getType().equals("OPERAND") ) {
|
} else if (currentToken.getType().equals("OPERAND")) {
|
||||||
state = 1;
|
state = 1;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getToken().equals("(")){
|
} else if (currentToken.getToken().equals("(")) {
|
||||||
state = 2;
|
state = 2;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getToken().equals(")")){
|
} else if (currentToken.getToken().equals(")")) {
|
||||||
state = 1;
|
state = 1;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
fehler = "Unbekanntes Token: "+currentToken.getType();
|
fehler = "Unbekanntes Token: " + currentToken.getType();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if( currentToken.getType().equals("OPERATOR") ) {
|
if (currentToken.getType().equals("OPERATOR")) {
|
||||||
state = 0;
|
state = 0;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getType().equals("OPERAND") ) {
|
} else if (currentToken.getType().equals("OPERAND")) {
|
||||||
fehler = "Auf einen Operanden darf kein Operand folgen!";
|
fehler = "Auf einen Operanden darf kein Operand folgen!";
|
||||||
return false;
|
return false;
|
||||||
} else if( currentToken.getToken().equals("(") ) {
|
} else if (currentToken.getToken().equals("(")) {
|
||||||
fehler = "Auf einen Operanden kann kein ( folgen";
|
fehler = "Auf einen Operanden kann kein ( folgen";
|
||||||
return false;
|
return false;
|
||||||
} else if( currentToken.getToken().equals(")")) {
|
} else if (currentToken.getToken().equals(")")) {
|
||||||
state = 1;
|
state = 1;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
fehler = "Unbekanntes Token: "+currentToken.getType();
|
fehler = "Unbekanntes Token: " + currentToken.getType();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
if( currentToken.getType().equals("OPERATOR") ) {
|
if (currentToken.getType().equals("OPERATOR")) {
|
||||||
state = 0;
|
state = 0;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getType().equals("OPERAND") ) {
|
} else if (currentToken.getType().equals("OPERAND")) {
|
||||||
state = 1;
|
state = 1;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getToken().equals("(")){
|
} else if (currentToken.getToken().equals("(")) {
|
||||||
state = 2;
|
state = 2;
|
||||||
break;
|
break;
|
||||||
} else if( currentToken.getToken().equals(")")){
|
} else if (currentToken.getToken().equals(")")) {
|
||||||
state = 1;
|
state = 1;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
fehler = "Unbekanntes Token: "+currentToken.getType();
|
fehler = "Unbekanntes Token: " + currentToken.getType();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,7 +367,7 @@ public class Rechenmaschine {
|
|||||||
tokenlist.next();
|
tokenlist.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( state == 0 ) {
|
if (state == 0) {
|
||||||
fehler = "Ein Rechenterm darf nicht auf einen Operator enden!";
|
fehler = "Ein Rechenterm darf nicht auf einen Operator enden!";
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -386,10 +377,10 @@ public class Rechenmaschine {
|
|||||||
|
|
||||||
public boolean analyse() {
|
public boolean analyse() {
|
||||||
tokenlist.toFirst();
|
tokenlist.toFirst();
|
||||||
while(tokenlist.hasAccess()){
|
while (tokenlist.hasAccess()) {
|
||||||
if(tokenlist.getContent().getToken().equals("/")){
|
if (tokenlist.getContent().getToken().equals("/")) {
|
||||||
tokenlist.next();
|
tokenlist.next();
|
||||||
if(tokenlist.getContent().getToken().equals("0")){
|
if (tokenlist.getContent().getToken().equals("0")) {
|
||||||
fehler = "Es kann nicht durch 0 geteilt werden.";
|
fehler = "Es kann nicht durch 0 geteilt werden.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -399,45 +390,45 @@ public class Rechenmaschine {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void punktVorStrich(List<Token>pList){
|
private void punktVorStrich(List<Token> pList) {
|
||||||
pList.toFirst();
|
pList.toFirst();
|
||||||
while(pList.hasAccess()){
|
while (pList.hasAccess()) {
|
||||||
if(pList.getContent().getToken().equals("*")){
|
if (pList.getContent().getToken().equals("*")) {
|
||||||
pList.remove();
|
pList.remove();
|
||||||
Double faktor1 = Double.parseDouble(pList.getContent().getToken());
|
Double faktor1 = Double.parseDouble(pList.getContent().getToken());
|
||||||
|
|
||||||
pList.current=pList.getPrevious(pList.current);
|
pList.current = pList.getPrevious(pList.current);
|
||||||
Double faktor2 = Double.parseDouble(pList.getContent().getToken());
|
Double faktor2 = Double.parseDouble(pList.getContent().getToken());
|
||||||
|
|
||||||
pList.remove();
|
pList.remove();
|
||||||
|
|
||||||
pList.getContent().setToken(String.valueOf(faktor2*faktor1));
|
pList.getContent().setToken(String.valueOf(faktor2 * faktor1));
|
||||||
} else if(pList.getContent().getToken().equals("/")){
|
} else if (pList.getContent().getToken().equals("/")) {
|
||||||
pList.remove();
|
pList.remove();
|
||||||
|
|
||||||
Double divisor = Double.parseDouble(pList.getContent().getToken());
|
Double divisor = Double.parseDouble(pList.getContent().getToken());
|
||||||
|
|
||||||
//Previous Token muss gelöscht werden, tokenlist.getContent != null ist,
|
//Previous Token muss gelöscht werden, tokenlist.getContent != null ist,
|
||||||
// wenn der 2. Token am ende des Termes ist.
|
// wenn der 2. Token am ende des Termes ist.
|
||||||
pList.current=pList.getPrevious(pList.current);
|
pList.current = pList.getPrevious(pList.current);
|
||||||
Double dividend = Double.parseDouble(pList.getContent().getToken());
|
Double dividend = Double.parseDouble(pList.getContent().getToken());
|
||||||
|
|
||||||
pList.remove();
|
pList.remove();
|
||||||
|
|
||||||
pList.getContent().setToken(String.valueOf(dividend/divisor));
|
pList.getContent().setToken(String.valueOf(dividend / divisor));
|
||||||
}
|
}
|
||||||
pList.next();
|
pList.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void klammerRegel(List<Token>pList){
|
private void klammerRegel(List<Token> pList) {
|
||||||
List<Token> newTokenlist= new List<Token>();
|
List<Token> newTokenlist = new List<Token>();
|
||||||
pList.toFirst();
|
pList.toFirst();
|
||||||
double berechnet;
|
double berechnet;
|
||||||
//Durchlaufe die Tokenliste
|
//Durchlaufe die Tokenliste
|
||||||
while(pList.hasAccess()){
|
while (pList.hasAccess()) {
|
||||||
// Token gleich ( dann entferne ihn
|
// Token gleich ( dann entferne ihn
|
||||||
if(pList.getContent().getToken().equals("(")) {
|
if (pList.getContent().getToken().equals("(")) {
|
||||||
pList.remove();
|
pList.remove();
|
||||||
//anschließend durchlaufe solange, bis auf ) gestoßen wird
|
//anschließend durchlaufe solange, bis auf ) gestoßen wird
|
||||||
while (!pList.getContent().getToken().equals(")")) {
|
while (!pList.getContent().getToken().equals(")")) {
|
||||||
@@ -475,52 +466,52 @@ public class Rechenmaschine {
|
|||||||
pList.next();
|
pList.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private double mehrereKlammern(List<Token>pList){
|
|
||||||
List<Token> newTokenlist= new List<Token>();
|
private double mehrereKlammern(List<Token> pList) {
|
||||||
double berechnet=0;
|
List<Token> newTokenlist = new List<Token>();
|
||||||
//wenn current ( ist
|
double berechnet = 0;
|
||||||
if(pList.getContent().getToken().equals("(")){
|
//wenn current ( ist
|
||||||
//wird es entfernt
|
if (pList.getContent().getToken().equals("(")) {
|
||||||
pList.remove();
|
//wird es entfernt
|
||||||
//anschließend wird die übergebene tokenliste solange durchlaufen, bis ) auftritt
|
pList.remove();
|
||||||
while(!pList.getContent().getToken().equals(")")){
|
//anschließend wird die übergebene tokenliste solange durchlaufen, bis ) auftritt
|
||||||
|
while (!pList.getContent().getToken().equals(")")) {
|
||||||
|
|
||||||
|
|
||||||
|
if (pList.hasAccess()) {
|
||||||
if(pList.hasAccess()) {
|
//wenn current ( ist dann wird diese methode nochmal ab current ausgeführt und anschließend
|
||||||
//wenn current ( ist dann wird diese methode nochmal ab current ausgeführt und anschließend
|
// das ergebnis in newTokenlist eingefügt
|
||||||
// das ergebnis in newTokenlist eingefügt
|
if (pList.getContent().getToken().equals("(")) {
|
||||||
if (pList.getContent().getToken().equals("(") ) {
|
berechnet = mehrereKlammern(pList);
|
||||||
berechnet = mehrereKlammern(pList);
|
newTokenlist.append(new Token("OPERAND", String.valueOf(berechnet)));
|
||||||
newTokenlist.append(new Token("OPERAND",String.valueOf(berechnet)));
|
}
|
||||||
}
|
// wenn current nich ) ist, dann wird es in newTokenlist gespeichert und aus der tokenliste entfernt
|
||||||
// wenn current nich ) ist, dann wird es in newTokenlist gespeichert und aus der tokenliste entfernt
|
if (!pList.getContent().getToken().equals(")")) {
|
||||||
if (!pList.getContent().getToken().equals(")")) {
|
newTokenlist.append(pList.getContent());
|
||||||
newTokenlist.append(pList.getContent());
|
pList.remove();
|
||||||
pList.remove();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//wenn ) auftritt dann wird es entfernt und anschließend wird die berechnung von newTokenlist rückgegeben.
|
|
||||||
pList.remove();
|
|
||||||
berechnet = berechne(newTokenlist);
|
|
||||||
}
|
}
|
||||||
|
//wenn ) auftritt dann wird es entfernt und anschließend wird die berechnung von newTokenlist rückgegeben.
|
||||||
|
pList.remove();
|
||||||
|
berechnet = berechne(newTokenlist);
|
||||||
|
}
|
||||||
return berechnet;
|
return berechnet;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double berechne(List<Token> pList){
|
private double berechne(List<Token> pList) {
|
||||||
double result1 = 0;
|
double result1 = 0;
|
||||||
punktVorStrich(pList);
|
punktVorStrich(pList);
|
||||||
pList.toFirst();
|
pList.toFirst();
|
||||||
String previous="";
|
String previous = "";
|
||||||
while( pList.hasAccess() ) {
|
while (pList.hasAccess()) {
|
||||||
Token currentToken = pList.getContent();
|
Token currentToken = pList.getContent();
|
||||||
if(currentToken.getType().equals("OPERATOR")){
|
if (currentToken.getType().equals("OPERATOR")) {
|
||||||
previous=currentToken.getToken();
|
previous = currentToken.getToken();
|
||||||
}
|
}
|
||||||
if( currentToken.getType().equals("OPERAND") ) {
|
if (currentToken.getType().equals("OPERAND")) {
|
||||||
switch (previous) {
|
switch (previous) {
|
||||||
case "+", "" -> result1 += Double.parseDouble(currentToken.getToken());
|
case "+", "" -> result1 += Double.parseDouble(currentToken.getToken());
|
||||||
case "-" -> result1 -= Double.parseDouble(currentToken.getToken());
|
case "-" -> result1 -= Double.parseDouble(currentToken.getToken());
|
||||||
@@ -534,10 +525,13 @@ public class Rechenmaschine {
|
|||||||
public void run() {
|
public void run() {
|
||||||
klammerRegel(tokenlist);
|
klammerRegel(tokenlist);
|
||||||
punktVorStrich(tokenlist);
|
punktVorStrich(tokenlist);
|
||||||
double result=berechne(tokenlist);
|
double result = berechne(tokenlist);
|
||||||
DecimalFormat format = new DecimalFormat("#,##0.####");
|
DecimalFormat format = new DecimalFormat("#,##0.####");
|
||||||
String resultString=format.format(result);
|
String resultString = format.format(result);
|
||||||
System.out.println("Ergebnis der Ausführung: " + resultString);
|
this.result= resultString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user