From 0718fe16b241644c613cecb5f5f56f545b3a8003 Mon Sep 17 00:00:00 2001 From: "artem.didytschuk" Date: Thu, 15 Apr 2021 01:38:00 +0200 Subject: [PATCH] Aufgabe 3 fertig --- Rechenmaschine.java | 153 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 139 insertions(+), 14 deletions(-) diff --git a/Rechenmaschine.java b/Rechenmaschine.java index f39c36d..29f815d 100644 --- a/Rechenmaschine.java +++ b/Rechenmaschine.java @@ -13,7 +13,7 @@ public class Rechenmaschine { private String fehler; - private int result; + private double result; public Rechenmaschine() { tokenlist = new List<>(); @@ -64,6 +64,18 @@ public class Rechenmaschine { currentToken+=buchstabe; state = 2; break; + case '.': + System.out.println("Am anfang des Termes kann kein . stehen."); + return false; + case '+': + case '-': + case '*': + case '/': + System.out.println("Der Term darf nicht mir mit dem Operator " + buchstabe + " beginnen."); + return false; + default: + System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden."); + return false; } break; case 1: @@ -73,35 +85,141 @@ public class Rechenmaschine { state = 3; break; case '+': + case '-': + case '*': + case '/': tokenlist.append(new Token("OPERAND", currentToken)); + currentToken=""; + tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe))); + state = 5; - break; + break; + default: + System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden."); + return false; } break; case 2: switch(buchstabe){ - + case '.': + currentToken+=buchstabe; + state = 3; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken+=buchstabe; + state = 2; + break; + case '+': + case '-': + case '*': + case '/': + tokenlist.append(new Token("OPERAND",currentToken)); + currentToken=""; + tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe))); + state = 5; + break; + default: + System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden."); + return false; } break; case 3: switch(buchstabe){ - + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken+=buchstabe; + state = 4; + break; + case '+': + case '-': + case '*': + case '/': + System.out.println("Nach einem . darf kein Rechenoperator folgen"); + return false; } break; case 4: switch(buchstabe){ - + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken+=buchstabe; + state = 4; + break; + case '+': + case '-': + case '*': + case '/': + tokenlist.append(new Token("OPERAND",currentToken)); + currentToken=""; + tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe))); + state = 5; + break; + case '.': + System.out.println("Eine Dezimalzahl kann nur ein . haben."); + return false; } break; case 5: switch(buchstabe){ - + case '0': + currentToken+=buchstabe; + state = 1; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken+=buchstabe; + state = 2; + break; + case '.': + System.out.println("Nach einem Operator kann kein . stehen."); + return false; + case '+': + case '-': + case '*': + case '/': + System.out.println("Nach einem Operator darf nicht direkt ein weiterer Operator folgen."); + return false; + default: + System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden."); + return false; } break; } } - - /* + /* + for( char buchstabe: eingabe ) { switch( state ) { case 0: @@ -183,11 +301,14 @@ public class Rechenmaschine { } break; } - */ + } - - if( state == 0 ) { - fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht auf + oder - enden!"; + */ + if( state == 5 ) { + fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem Operator enden!"; + return false; + } else if (state == 3){ + fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem Operator enden!"; return false; } else { tokenlist.append(new Token("OPERAND", currentToken)); @@ -253,9 +374,13 @@ public class Rechenmaschine { } if( currentToken.getType().equals("OPERAND") ) { if(previous.equals("+")||previous.equals("")){ - result += Integer.parseInt(currentToken.getToken()); + result += Double.parseDouble(currentToken.getToken()); + } else if (previous.equals("-")) { + result -= Double.parseDouble(currentToken.getToken()); + } else if (previous.equals("*")){ + result *= Double.parseDouble(currentToken.getToken()); } else { - result -= Integer.parseInt(currentToken.getToken()); + result /= Double.parseDouble(currentToken.getToken()); } } tokenlist.next();