From a06dd5006a96a3775de57b2737b524631a60a3a5 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 19 Apr 2021 09:16:47 +0200 Subject: [PATCH] Div by zero fix --- Rechenmaschine.java | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/Rechenmaschine.java b/Rechenmaschine.java index 7b89391..ed7ad1e 100644 --- a/Rechenmaschine.java +++ b/Rechenmaschine.java @@ -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; } }