forked from IF-LK-2020/rechenmaschine
Div by zero fix
This commit is contained in:
parent
bdac23194b
commit
a06dd5006a
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue