Implemented Subtraction

This commit is contained in:
2021-04-19 09:44:27 +02:00
parent bdfd32c24a
commit 5260cdb1f3
2 changed files with 121 additions and 103 deletions

View File

@@ -48,78 +48,87 @@ public class Rechenmaschine {
for( char buchstabe: eingabe ) { for( char buchstabe: eingabe ) {
switch( state ) { switch( state ) {
case 0: case 0:
switch( buchstabe ) { switch( buchstabe ) {
case '0': case '0':
tokenlist.append(new Token("OPERAND", "0")); tokenlist.append(new Token("OPERAND", "0"));
state = 2; 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;
}
break; 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: case 1:
switch( buchstabe ) { switch( buchstabe ) {
case '+': case '+':
tokenlist.append(new Token("OPERAND", currentToken)); tokenlist.append(new Token("OPERAND", currentToken));
currentToken = ""; currentToken = "";
tokenlist.append(new Token("OPERATOR")); tokenlist.append(new Token("OPERATOR", "+"));
state = 0; state = 0;
break; break;
case '-':
tokenlist.append(new Token("OPERAND", currentToken));
currentToken = "";
tokenlist.append(new Token("OPERATOR", "-"));
state = 0;
break;
case '0': case '0':
case '1': case '1':
case '2': case '2':
case '3': case '3':
case '4': case '4':
case '5': case '5':
case '6': case '6':
case '7': case '7':
case '8': case '8':
case '9': case '9':
currentToken += buchstabe; currentToken += buchstabe;
state = 1; state = 1;
break;
default:
fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!";
return false;
}
break; break;
default:
fehler = "Fehler im Wort " +pEingabe+ ":\nDer Buchstabe " + buchstabe + " gehört nicht zur Sprache!";
return false;
}
break;
case 2: case 2:
switch( buchstabe ) { switch( buchstabe ) {
case '+': case '+':
tokenlist.append(new Token("OPERATOR")); tokenlist.append(new Token("OPERATOR","+"));
state = 0; state = 0;
break;
default:
fehler = "Fehler im Wort " +pEingabe+ ":\nNach 0 am Anfang muss ein + folgen!";
return false;
}
break; 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 ) { 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;
} else { } else {
fehler = "Unbekanntes Token: "+currentToken.getType(); fehler = "Unbekanntes Token: "+currentToken.getType();
return false; return false;
} }
break; break;
case 1: case 1:
if( currentToken.getType().equals("OPERATOR") ) { if( currentToken.getType().equals("OPERATOR") ) {
state = 0; state = 0;
} else if( currentToken.getType().equals("OPERAND") ) { } else if( currentToken.getType().equals("OPERAND") ) {
fehler = "Auf einen Operanden muss ein Operator folgen!"; fehler = "Auf einen Operanden muss ein Operator folgen!";
return false; return false;
} else { } else {
fehler = "Unbekanntes Token: "+currentToken.getType(); fehler = "Unbekanntes Token: "+currentToken.getType();
return false; return false;
} }
break; break;
} }
tokenlist.next(); tokenlist.next();
@@ -180,15 +188,25 @@ public class Rechenmaschine {
public void run() { public void run() {
result = 0; result = 0;
int state = 0;
tokenlist.toFirst(); tokenlist.toFirst();
while( tokenlist.hasAccess() ) { while( tokenlist.hasAccess() ) {
Token currentToken = tokenlist.getContent(); Token currentToken = tokenlist.getContent();
if( currentToken.getType().equals("OPERATOR")){
if( currentToken.getType().equals("OPERAND") ) { if(currentToken.getToken().equals("+")){
result += Integer.parseInt(currentToken.getToken()); 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(); tokenlist.next();
} }
} }

View File

@@ -5,18 +5,18 @@ dependency1.type=UsesDependency
dependency2.from=Rechenmaschine dependency2.from=Rechenmaschine
dependency2.to=Token dependency2.to=Token
dependency2.type=UsesDependency dependency2.type=UsesDependency
editor.fx.0.height=738 editor.fx.0.height=1416
editor.fx.0.width=816 editor.fx.0.width=2576
editor.fx.0.x=466 editor.fx.0.x=-8
editor.fx.0.y=146 editor.fx.0.y=-8
objectbench.height=66 objectbench.height=111
objectbench.width=1256 objectbench.width=1256
package.divider.horizontal=0.6 package.divider.horizontal=0.6
package.divider.vertical=0.9099876695437731 package.divider.vertical=0.847741935483871
package.editor.height=731 package.editor.height=650
package.editor.width=1157 package.editor.width=1145
package.editor.x=100 package.editor.x=410
package.editor.y=25 package.editor.y=334
package.frame.height=875 package.frame.height=875
package.frame.width=1296 package.frame.width=1296
package.numDependencies=2 package.numDependencies=2
@@ -33,8 +33,8 @@ target1.height=50
target1.name=List target1.name=List
target1.showInterface=false target1.showInterface=false
target1.type=ClassTarget target1.type=ClassTarget
target1.width=130 target1.width=150
target1.x=300 target1.x=450
target1.y=70 target1.y=70
target2.height=50 target2.height=50
target2.name=Token target2.name=Token
@@ -47,6 +47,6 @@ target3.height=50
target3.name=Rechenmaschine target3.name=Rechenmaschine
target3.showInterface=false target3.showInterface=false
target3.type=ClassTarget target3.type=ClassTarget
target3.width=120 target3.width=130
target3.x=170 target3.x=220
target3.y=210 target3.y=180