Div by zero fix

This commit is contained in:
Tim 2021-04-19 09:16:47 +02:00
parent bdac23194b
commit a06dd5006a
1 changed files with 22 additions and 9 deletions

View File

@ -19,7 +19,7 @@ public class Rechenmaschine {
tokenlist = new List<>();
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();
input.close();
@ -50,10 +50,6 @@ public class Rechenmaschine {
case 0:
switch( buchstabe ) {
case '0':
tokenlist.append(new Token("OPERAND", "0"));
state = 2;
break;
case '1':
case '2':
case '3':
@ -69,6 +65,8 @@ public class Rechenmaschine {
case '+':
case '-':
case '*':
case '/':
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit " + buchstabe + " beginnen!";
return false;
@ -83,6 +81,8 @@ public class Rechenmaschine {
switch( buchstabe ) {
case '+':
case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERAND", currentToken));
currentToken = "";
tokenlist.append(new Token("OPERATOR", "" + buchstabe));
@ -114,6 +114,8 @@ public class Rechenmaschine {
switch( buchstabe ) {
case '+':
case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERATOR", "" + buchstabe));
state = 0;
break;
@ -138,27 +140,30 @@ public class Rechenmaschine {
public boolean parse() {
int state = 0;
Token lastToken = null;
tokenlist.toFirst();
while( tokenlist.hasAccess() ) {
Token currentToken = tokenlist.getContent();
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") ) {
if (currentToken.getToken().equals("0") && lastToken != null && lastToken.getToken().equals("/")) {
fehler = "Es darf nicht durch 0 geteilt werden.";
return false;
}
state = 1;
} else {
fehler = "Unbekanntes Token: "+currentToken.getType();
return false;
}
break;
case 1:
if( currentToken.getType().equals("OPERATOR") ) {
lastToken = currentToken;
state = 0;
} else if( currentToken.getType().equals("OPERAND") ) {
fehler = "Auf einen Operanden muss ein Operator folgen!";
@ -199,6 +204,14 @@ public class Rechenmaschine {
tokenlist.next();
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;
}
}