forked from IF-LK-2020/rechenmaschine
Compare commits
2 Commits
7f5f904a72
...
a06dd5006a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a06dd5006a | ||
|
|
bdac23194b |
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user