Aufgabe 3 fertig

This commit is contained in:
Artem Didytschuk 2021-04-15 01:38:00 +02:00
parent 270cefb4a9
commit 0718fe16b2
1 changed files with 139 additions and 14 deletions

View File

@ -13,7 +13,7 @@ public class Rechenmaschine {
private String fehler;
private int result;
private double result;
public Rechenmaschine() {
tokenlist = new List<>();
@ -64,6 +64,18 @@ public class Rechenmaschine {
currentToken+=buchstabe;
state = 2;
break;
case '.':
System.out.println("Am anfang des Termes kann kein . stehen.");
return false;
case '+':
case '-':
case '*':
case '/':
System.out.println("Der Term darf nicht mir mit dem Operator " + buchstabe + " beginnen.");
return false;
default:
System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden.");
return false;
}
break;
case 1:
@ -73,35 +85,141 @@ public class Rechenmaschine {
state = 3;
break;
case '+':
case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERAND", currentToken));
currentToken="";
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
state = 5;
break;
break;
default:
System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden.");
return false;
}
break;
case 2:
switch(buchstabe){
case '.':
currentToken+=buchstabe;
state = 3;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
currentToken+=buchstabe;
state = 2;
break;
case '+':
case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERAND",currentToken));
currentToken="";
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
state = 5;
break;
default:
System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden.");
return false;
}
break;
case 3:
switch(buchstabe){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
currentToken+=buchstabe;
state = 4;
break;
case '+':
case '-':
case '*':
case '/':
System.out.println("Nach einem . darf kein Rechenoperator folgen");
return false;
}
break;
case 4:
switch(buchstabe){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
currentToken+=buchstabe;
state = 4;
break;
case '+':
case '-':
case '*':
case '/':
tokenlist.append(new Token("OPERAND",currentToken));
currentToken="";
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
state = 5;
break;
case '.':
System.out.println("Eine Dezimalzahl kann nur ein . haben.");
return false;
}
break;
case 5:
switch(buchstabe){
case '0':
currentToken+=buchstabe;
state = 1;
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
currentToken+=buchstabe;
state = 2;
break;
case '.':
System.out.println("Nach einem Operator kann kein . stehen.");
return false;
case '+':
case '-':
case '*':
case '/':
System.out.println("Nach einem Operator darf nicht direkt ein weiterer Operator folgen.");
return false;
default:
System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden.");
return false;
}
break;
}
}
/*
/*
for( char buchstabe: eingabe ) {
switch( state ) {
case 0:
@ -183,11 +301,14 @@ public class Rechenmaschine {
}
break;
}
*/
}
if( state == 0 ) {
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht auf + oder - enden!";
*/
if( state == 5 ) {
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem Operator enden!";
return false;
} else if (state == 3){
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht mit einem Operator enden!";
return false;
} else {
tokenlist.append(new Token("OPERAND", currentToken));
@ -253,9 +374,13 @@ public class Rechenmaschine {
}
if( currentToken.getType().equals("OPERAND") ) {
if(previous.equals("+")||previous.equals("")){
result += Integer.parseInt(currentToken.getToken());
result += Double.parseDouble(currentToken.getToken());
} else if (previous.equals("-")) {
result -= Double.parseDouble(currentToken.getToken());
} else if (previous.equals("*")){
result *= Double.parseDouble(currentToken.getToken());
} else {
result -= Integer.parseInt(currentToken.getToken());
result /= Double.parseDouble(currentToken.getToken());
}
}
tokenlist.next();