# Rekursion mit While Schleife kombinieren?



## Timo2010 (12. Jan 2011)

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:

```
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?


----------



## Timo2010 (12. Jan 2011)

Ich habe jetzt eine While Schleife für die Rekursion:

```
while (!TaschenrechnerUIJWindow.operatoren.isEmpty()||!istHoeherwertig(usedoperator,TaschenrechnerUIJWindow.operatoren.top())){
		rechne(usedoperator);
		System.out.println("Zwischenergebnis: "+TaschenrechnerUIJWindow.operanden.top());
		}
```
Nun funktioniert ein Durchlauf der Schleife und dann gibt es einen ArrayIndexOutofBoundsException, obwohl in der Methode rechne() noch die Größe der Stapel geprüft wird?


----------



## XHelp (12. Jan 2011)

Die Strings werden immer noch mit equals verglichen.
Wo gibt es denn die Exception? Mach die Sysoutausgaben rein, damit du nachvollziehen kannst, was da passiert.


----------



## Timo2010 (12. Jan 2011)

Habe es durch etliche Abfragen anscheinend gelöst. Nun hätte ich noch eine Frage: Kann man eine While Schleife auch einfach mit einem Befehl beenden? So etwas gibt es auch in PHP.


----------



## XHelp (12. Jan 2011)

nicht viel anders als in php: 
	
	
	
	





```
break
```
... da hätte man auch drauf kommen können


----------

