Guten Abend,
ich würde gerne eine Rekursion mit einer While Schleife kombinieren. Ich habe zwei Stacks mit Operatoren und Operanden. Nun habe ich eine Methode namens istHoeherwertig(), die prüft, ob der zuletzt geklickte Operator Hoeherwertig ist. Denn dann wird nicht mehr gerechnet, sondern der Operator auf den Operatorenstapel gelegt, ebenso wenn der Operatorenstapel leer ist.
Die Rechenmethode:
Leider erhalte ich dabei eine ArrayIndexOutofBoundsException und weiß nicht, wie ich das Problem lösen kann. Könntet ihr mir sagen, wo der Fehler liegt?
ich würde gerne eine Rekursion mit einer While Schleife kombinieren. Ich habe zwei Stacks mit Operatoren und Operanden. Nun habe ich eine Methode namens istHoeherwertig(), die prüft, ob der zuletzt geklickte Operator Hoeherwertig ist. Denn dann wird nicht mehr gerechnet, sondern der Operator auf den Operatorenstapel gelegt, ebenso wenn der Operatorenstapel leer ist.
Die Rechenmethode:
Java:
public void rechne(String eingabeoperator){
if (sizeoperanden >=2 && !TaschenrechnerUIJWindow.operatoren.isEmpty()){
double operandaint = Double.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
TaschenrechnerUIJWindow.operanden.pop();
sizeoperanden--;
double operandbint = Double.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
TaschenrechnerUIJWindow.operanden.pop();
sizeoperanden--;
String stackoperator = (String)TaschenrechnerUIJWindow.operatoren.top();
TaschenrechnerUIJWindow.operatoren.pop();
if (stackoperator == "*"){
zwischenergebnis = operandaint * operandbint;
}
else if (stackoperator == "/"){
zwischenergebnis = operandaint / operandbint;
}
else if (stackoperator == "+"){
zwischenergebnis = operandaint + operandbint;
}
else if (stackoperator == "-"){
zwischenergebnis = operandaint - operandbint;
}
TaschenrechnerUIJWindow.operanden.push(zwischenergebnis);
sizeoperanden++;
while (TaschenrechnerUIJWindow.operatoren.isEmpty()||istHoeherwertig(eingabeoperator)){
rechne(eingabeoperator);
}
}
}
Leider erhalte ich dabei eine ArrayIndexOutofBoundsException und weiß nicht, wie ich das Problem lösen kann. Könntet ihr mir sagen, wo der Fehler liegt?