Compare commits

..

2 Commits

Author SHA1 Message Date
Tim
a06dd5006a Div by zero fix 2021-04-19 09:16:47 +02:00
Tim
bdac23194b +/- funktioniert 2021-04-19 08:48:12 +02:00

View File

@@ -19,7 +19,7 @@ public class Rechenmaschine {
tokenlist = new List<>(); tokenlist = new List<>();
Scanner input = new Scanner(System.in); Scanner input = new Scanner(System.in);
System.out.println("Gib einen Plus-/Minusterm ein und bestätige mit ENTER: "); System.out.println("Gib einen (+ - * /)-term ein und bestätige mit ENTER: ");
String eingabe = input.nextLine(); String eingabe = input.nextLine();
input.close(); input.close();
@@ -50,10 +50,6 @@ public class Rechenmaschine {
case 0: case 0:
switch( buchstabe ) { switch( buchstabe ) {
case '0': case '0':
tokenlist.append(new Token("OPERAND", "0"));
state = 2;
break;
case '1': case '1':
case '2': case '2':
case '3': case '3':
@@ -69,6 +65,8 @@ public class Rechenmaschine {
case '+': case '+':
case '-': case '-':
case '*':
case '/':
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit " + buchstabe + " beginnen!"; fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit " + buchstabe + " beginnen!";
return false; return false;
@@ -83,6 +81,8 @@ public class Rechenmaschine {
switch( buchstabe ) { switch( buchstabe ) {
case '+': case '+':
case '-': case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERAND", currentToken)); tokenlist.append(new Token("OPERAND", currentToken));
currentToken = ""; currentToken = "";
tokenlist.append(new Token("OPERATOR", "" + buchstabe)); tokenlist.append(new Token("OPERATOR", "" + buchstabe));
@@ -114,6 +114,8 @@ public class Rechenmaschine {
switch( buchstabe ) { switch( buchstabe ) {
case '+': case '+':
case '-': case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERATOR", "" + buchstabe)); tokenlist.append(new Token("OPERATOR", "" + buchstabe));
state = 0; state = 0;
break; break;
@@ -138,27 +140,30 @@ public class Rechenmaschine {
public boolean parse() { public boolean parse() {
int state = 0; int state = 0;
Token lastToken = null;
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") ) {
if (currentToken.getToken().equals("0") && lastToken != null && lastToken.getToken().equals("/")) {
fehler = "Es darf nicht durch 0 geteilt werden.";
return false;
}
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") ) {
lastToken = currentToken;
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!";
@@ -182,9 +187,10 @@ public class Rechenmaschine {
} }
public void run() { public void run() {
result = 0;
tokenlist.toFirst(); tokenlist.toFirst();
result = Integer.parseInt(tokenlist.getContent().getToken());
while( tokenlist.hasAccess() ) { while( tokenlist.hasAccess() ) {
Token currentToken = tokenlist.getContent(); Token currentToken = tokenlist.getContent();
@@ -192,11 +198,19 @@ public class Rechenmaschine {
switch (currentToken.getToken()) { switch (currentToken.getToken()) {
case "+": case "+":
tokenlist.next(); tokenlist.next();
result += Integer.parseInt(currentToken.getToken()); result += Integer.parseInt(tokenlist.getContent().getToken());
break; break;
case "-": case "-":
tokenlist.next(); tokenlist.next();
result -= Integer.parseInt(currentToken.getToken()); result -= Integer.parseInt(tokenlist.getContent().getToken());
break;
case "*":
tokenlist.next();
result *= Integer.parseInt(tokenlist.getContent().getToken());
break;
case "/":
tokenlist.next();
result /= Integer.parseInt(tokenlist.getContent().getToken());
break; break;
} }
} }