forked from IF-LK-2020/rechenmaschine
Aufgabe 3 fertig
This commit is contained in:
parent
270cefb4a9
commit
0718fe16b2
|
@ -13,7 +13,7 @@ public class Rechenmaschine {
|
||||||
|
|
||||||
private String fehler;
|
private String fehler;
|
||||||
|
|
||||||
private int result;
|
private double result;
|
||||||
|
|
||||||
public Rechenmaschine() {
|
public Rechenmaschine() {
|
||||||
tokenlist = new List<>();
|
tokenlist = new List<>();
|
||||||
|
@ -64,6 +64,18 @@ public class Rechenmaschine {
|
||||||
currentToken+=buchstabe;
|
currentToken+=buchstabe;
|
||||||
state = 2;
|
state = 2;
|
||||||
break;
|
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;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -73,35 +85,141 @@ public class Rechenmaschine {
|
||||||
state = 3;
|
state = 3;
|
||||||
break;
|
break;
|
||||||
case '+':
|
case '+':
|
||||||
|
case '-':
|
||||||
|
case '*':
|
||||||
|
case '/':
|
||||||
tokenlist.append(new Token("OPERAND", currentToken));
|
tokenlist.append(new Token("OPERAND", currentToken));
|
||||||
|
currentToken="";
|
||||||
|
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
|
||||||
|
|
||||||
state = 5;
|
state = 5;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println("Der Buchstabe " + buchstabe + " ist nicht in der Sprache vorhanden.");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
switch(buchstabe){
|
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;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
switch(buchstabe){
|
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;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
switch(buchstabe){
|
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;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
switch(buchstabe){
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
/*
|
|
||||||
for( char buchstabe: eingabe ) {
|
for( char buchstabe: eingabe ) {
|
||||||
switch( state ) {
|
switch( state ) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -183,11 +301,14 @@ public class Rechenmaschine {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if( state == 0 ) {
|
if( state == 5 ) {
|
||||||
fehler = "Fehler im Wort " +pEingabe+ ":\nDas Wort darf nicht auf + oder - enden!";
|
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;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
tokenlist.append(new Token("OPERAND", currentToken));
|
tokenlist.append(new Token("OPERAND", currentToken));
|
||||||
|
@ -253,9 +374,13 @@ public class Rechenmaschine {
|
||||||
}
|
}
|
||||||
if( currentToken.getType().equals("OPERAND") ) {
|
if( currentToken.getType().equals("OPERAND") ) {
|
||||||
if(previous.equals("+")||previous.equals("")){
|
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 {
|
} else {
|
||||||
result -= Integer.parseInt(currentToken.getToken());
|
result /= Double.parseDouble(currentToken.getToken());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tokenlist.next();
|
tokenlist.next();
|
||||||
|
|
Loading…
Reference in New Issue