From 5260cdb1f3441152676a7882baebdcba4962c8b1 Mon Sep 17 00:00:00 2001 From: maxlm128 Date: Mon, 19 Apr 2021 09:44:27 +0200 Subject: [PATCH] Implemented Subtraction --- Rechenmaschine.java | 194 ++++++++++++++++++++++++-------------------- package.bluej | 30 +++---- 2 files changed, 121 insertions(+), 103 deletions(-) diff --git a/Rechenmaschine.java b/Rechenmaschine.java index 010d154..3f40133 100644 --- a/Rechenmaschine.java +++ b/Rechenmaschine.java @@ -48,78 +48,87 @@ public class Rechenmaschine { for( char buchstabe: eingabe ) { switch( state ) { case 0: - switch( buchstabe ) { - case '0': - tokenlist.append(new Token("OPERAND", "0")); - state = 2; - break; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - currentToken += buchstabe; - state = 1; - break; - - case '+': - fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit + beginnen!"; - return false; - - default: - fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!"; - return false; - } + switch( buchstabe ) { + case '0': + tokenlist.append(new Token("OPERAND", "0")); + state = 2; break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken += buchstabe; + state = 1; + break; + + case '+': + fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit + beginnen!"; + return false; + case '-': + fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit - beginnen!"; + return false; + default: + fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!"; + return false; + } + break; case 1: - switch( buchstabe ) { - case '+': - tokenlist.append(new Token("OPERAND", currentToken)); - currentToken = ""; - tokenlist.append(new Token("OPERATOR")); - state = 0; - break; + switch( buchstabe ) { + case '+': + tokenlist.append(new Token("OPERAND", currentToken)); + currentToken = ""; + tokenlist.append(new Token("OPERATOR", "+")); + state = 0; + break; + case '-': + tokenlist.append(new Token("OPERAND", currentToken)); + currentToken = ""; + tokenlist.append(new Token("OPERATOR", "-")); + state = 0; + break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - currentToken += buchstabe; - state = 1; - break; - - default: - fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!"; - return false; - } + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + currentToken += buchstabe; + state = 1; break; + default: + fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!"; + return false; + } + break; case 2: - switch( buchstabe ) { - case '+': - tokenlist.append(new Token("OPERATOR")); - state = 0; - break; - - default: - fehler = "Fehler im Wort " +pEingabe+ ":\nNach 0 am Anfang muss ein + folgen!"; - return false; - } + switch( buchstabe ) { + case '+': + tokenlist.append(new Token("OPERATOR","+")); + state = 0; break; + case '-': + tokenlist.append(new Token("OPERATOR","-")); + state = 0; + break; + default: + fehler = "Fehler im Wort " +pEingabe+ ":\nNach 0 am Anfang muss ein + oder ein - folgen!"; + return false; + } + break; } } @@ -142,29 +151,28 @@ public class Rechenmaschine { switch( state ) { case 0: - if( currentToken.getType().equals("OPERATOR") ) { - fehler = "Rechenterm darf nicht mit einem Operator starten!"; - return false; - } else if( currentToken.getType().equals("OPERAND") ) { - state = 1; - } else { - fehler = "Unbekanntes Token: "+currentToken.getType(); - return false; - } - break; - + if( currentToken.getType().equals("OPERATOR") ) { + fehler = "Rechenterm darf nicht mit einem Operator starten!"; + return false; + } else if( currentToken.getType().equals("OPERAND") ) { + state = 1; + } else { + fehler = "Unbekanntes Token: "+currentToken.getType(); + return false; + } + break; case 1: - if( currentToken.getType().equals("OPERATOR") ) { - state = 0; - } else if( currentToken.getType().equals("OPERAND") ) { - fehler = "Auf einen Operanden muss ein Operator folgen!"; - return false; - } else { - fehler = "Unbekanntes Token: "+currentToken.getType(); - return false; - } - break; + if( currentToken.getType().equals("OPERATOR") ) { + state = 0; + } else if( currentToken.getType().equals("OPERAND") ) { + fehler = "Auf einen Operanden muss ein Operator folgen!"; + return false; + } else { + fehler = "Unbekanntes Token: "+currentToken.getType(); + return false; + } + break; } tokenlist.next(); @@ -180,15 +188,25 @@ public class Rechenmaschine { public void run() { result = 0; - + int state = 0; tokenlist.toFirst(); while( tokenlist.hasAccess() ) { Token currentToken = tokenlist.getContent(); - - if( currentToken.getType().equals("OPERAND") ) { - result += Integer.parseInt(currentToken.getToken()); + if( currentToken.getType().equals("OPERATOR")){ + if(currentToken.getToken().equals("+")){ + state = 0; + } else if(currentToken.getToken().equals("-")){ + state = 1; + } + } + else if( currentToken.getType().equals("OPERAND") ) { + if(state == 0){ + result += Integer.parseInt(currentToken.getToken()); //Konvertiert den String in ein Integer und rechnet es dem Result hinzu + } + else if(state == 1){ + result -= Integer.parseInt(currentToken.getToken()); //Konvertiert den String in ein Integer und zieht es dem Result ab + } } - tokenlist.next(); } } diff --git a/package.bluej b/package.bluej index 87ec5df..163968a 100644 --- a/package.bluej +++ b/package.bluej @@ -5,18 +5,18 @@ dependency1.type=UsesDependency dependency2.from=Rechenmaschine dependency2.to=Token dependency2.type=UsesDependency -editor.fx.0.height=738 -editor.fx.0.width=816 -editor.fx.0.x=466 -editor.fx.0.y=146 -objectbench.height=66 +editor.fx.0.height=1416 +editor.fx.0.width=2576 +editor.fx.0.x=-8 +editor.fx.0.y=-8 +objectbench.height=111 objectbench.width=1256 package.divider.horizontal=0.6 -package.divider.vertical=0.9099876695437731 -package.editor.height=731 -package.editor.width=1157 -package.editor.x=100 -package.editor.y=25 +package.divider.vertical=0.847741935483871 +package.editor.height=650 +package.editor.width=1145 +package.editor.x=410 +package.editor.y=334 package.frame.height=875 package.frame.width=1296 package.numDependencies=2 @@ -33,8 +33,8 @@ target1.height=50 target1.name=List target1.showInterface=false target1.type=ClassTarget -target1.width=130 -target1.x=300 +target1.width=150 +target1.x=450 target1.y=70 target2.height=50 target2.name=Token @@ -47,6 +47,6 @@ target3.height=50 target3.name=Rechenmaschine target3.showInterface=false target3.type=ClassTarget -target3.width=120 -target3.x=170 -target3.y=210 +target3.width=130 +target3.x=220 +target3.y=180