Compare commits

...

2 Commits

1 changed files with 46 additions and 16 deletions

View File

@ -1,5 +1,5 @@
import java.util.Scanner;
import java.text.DecimalFormat;
/**
* Hauptklasse des Projekts
*/
@ -44,7 +44,7 @@ public class Rechenmaschine {
}
run();
System.out.println("Ergebnis der Ausführung: " + result);
}
public boolean scanne( String pEingabe ) {
@ -241,7 +241,11 @@ public class Rechenmaschine {
currentToken.append(buchstabe);
state = 2;
}
case '+', '-', '*', '/' -> {
case '+', '-' -> {
tokenlist.append(new Token("OPERATOR",Character.toString(buchstabe)));
state = 5;
}
case '*', '/' -> {
System.out.println("Unmittelbar nach ( darf kein Operator oder ) folgen.");
return false;
}
@ -292,9 +296,13 @@ public class Rechenmaschine {
return false;
} else {
tokenlist.toLast();
if(!tokenlist.getContent().getToken().equals(")")){
if (tokenlist.hasAccess()) {
if (!tokenlist.getContent().getToken().equals(")")) {
tokenlist.append(new Token("OPERAND", currentToken.toString()));
}
} else {
tokenlist.append(new Token("OPERAND", currentToken.toString()));
return true;
}
return true;
}
@ -317,7 +325,7 @@ public class Rechenmaschine {
state = 1;
break;
} else if( currentToken.getToken().equals("(")){
state = 0;
state = 2;
break;
} else if( currentToken.getToken().equals(")")){
state = 1;
@ -341,11 +349,28 @@ public class Rechenmaschine {
return false;
} else if( currentToken.getToken().equals(")")) {
state = 1;
break;
} else {
fehler = "Unbekanntes Token: "+currentToken.getType();
return false;
}
case 2:
if( currentToken.getType().equals("OPERATOR") ) {
state = 0;
break;
} else if( currentToken.getType().equals("OPERAND") ) {
state = 1;
break;
} else if( currentToken.getToken().equals("(")){
state = 2;
break;
} else if( currentToken.getToken().equals(")")){
state = 1;
break;
} else {
fehler = "Unbekanntes Token: "+currentToken.getType();
return false;
}
}
tokenlist.next();
@ -412,19 +437,19 @@ public class Rechenmaschine {
//Durchlaufe die Tokenliste
while(pList.hasAccess()){
// Token gleich ( dann entferne ihn
if(pList.getContent().getToken().equals("(")){
if(pList.getContent().getToken().equals("(")) {
pList.remove();
//anschließend durchlaufe solange, bis auf ) gestoßen wird
while(!pList.getContent().getToken().equals(")")){
while (!pList.getContent().getToken().equals(")")) {
//wenn noch nicht am ende der tokenliste
if(pList.hasAccess()) {
if (pList.hasAccess()) {
//wenn ( erneutvorkommt
if (pList.getContent().getToken().equals("(") ) {
if (pList.getContent().getToken().equals("(")) {
// rufe die methode mehrereKlammern auf und speicher das ergebnis als neues Token in newTokenlist
berechnet = mehrereKlammern(pList);
newTokenlist.append(new Token("OPERAND",String.valueOf(berechnet)));
newTokenlist.append(new Token("OPERAND", String.valueOf(berechnet)));
}
//wenn der Token nicht ) ist dann soll dieser in newTokenlist eingefügt werden und anschließend entfernt werden
if (!pList.getContent().getToken().equals(")")) {
@ -438,7 +463,11 @@ public class Rechenmaschine {
//newTokenlist wird ausgerechnet
berechnet = berechne(newTokenlist);
//und in die Tokenliste eingefügt
pList.insert(new Token("OPERAND", String.valueOf(berechnet)));
if (pList.hasAccess()) {
pList.insert(new Token("OPERAND", String.valueOf(berechnet)));
} else {
pList.append(new Token("OPERAND", String.valueOf(berechnet)));
}
newTokenlist = new List<Token>();
//hier wurde nun 1 klammer gelöst
}
@ -505,9 +534,10 @@ public class Rechenmaschine {
public void run() {
klammerRegel(tokenlist);
punktVorStrich(tokenlist);
result=berechne(tokenlist);
double result=berechne(tokenlist);
DecimalFormat format = new DecimalFormat("#,##0.####");
String resultString=format.format(result);
System.out.println("Ergebnis der Ausführung: " + resultString);
}
}