Übung08

Moderator: AI 2

Benutzeravatar
SophiaLi1
Moderator
Moderator
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Übung08

Beitrag von SophiaLi1 »

Hier können Fragen zur Übung08 gestellt werden.

annabel
Neuling
Neuling
Beiträge: 5
Registriert: 12. Mai 2014 20:31

Re: Übung08

Beitrag von annabel »

Hallo,
muss man bei Übung 8 in der Aufgabe 3 beide Methoden (even und odd) jeweils in der anderen Methode verwenden, oder reicht es aus, wenn man nur odd in even aufruft? Ich habe mit dem anderen Weg eine Endlosschleife geschafft;)
LG

Benutzeravatar
SophiaLi1
Moderator
Moderator
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Übung08

Beitrag von SophiaLi1 »

Normalerweise (ich wüsste nicht, wie es sonst gehen sollte) ruft man in den Methoden jeweils die andere auf. Du musst natürlich darauf achten, dass du eine Abbruchbedingung hast, um nicht in eine Endlosschleife zu geraten.

m_flaig
Moderator
Moderator
Beiträge: 272
Registriert: 27. Sep 2009 14:02

Re: Übung08

Beitrag von m_flaig »

Eine Musterlösung ist ab sofort in moodle verfügbar.

JonasHülsmann
Neuling
Neuling
Beiträge: 3
Registriert: 28. Apr 2014 11:16

Re: Übung08

Beitrag von JonasHülsmann »

Hallo,
habe zwecks Klausurvorbereitung die Übung noch einmal gemacht und mit ist ein problem untergekommen.

Code: Alles auswählen

public class EvenOdd {

	public static boolean even(int num){
	if(num==0){return true;}else{
		if(odd(num-1)){return true;}else{return false;}
	}	
	}
	public static boolean odd(int num){
	if(num==0){return false;}else{
		if(even(num-1)){return true;}else{return false;}
	}	
	}
	
	public static void main(String[] args) {
		System.out.println(even(11424));

	}

}
es funktioniert alles soweit super mit meinem Code ( auch wenn er nicht so wie in der Musterlösung ist), allerdings bekomme ich beim Sprung von 11424 auf 11425 beim Überprüfen etwa genau so viele java.lang.StackOverflowError Fehler, liegt das an einem Fehler in meinem Code?
Konnte aus der Java API nicht so ganz schließen was der Fehler bedeutet :/
Gruß Jonas

m_flaig
Moderator
Moderator
Beiträge: 272
Registriert: 27. Sep 2009 14:02

Re: Übung08

Beitrag von m_flaig »

Hallo,

nein, das liegt nicht an Ihrem Code, der ist richtig :-)
Das Problem liegt daran, dass bei jedem Methodenaufruf die Rücksprungadresse und die Zustände der lokalen Variablen auf den Stack gepackt werden. Geht die Rekursion zu tief, läuft der Stack voll, was zu einem java.lang.StackOverflowError führt.

Viele Grüße,
M.Flaig

JonasHülsmann
Neuling
Neuling
Beiträge: 3
Registriert: 28. Apr 2014 11:16

Re: Übung08

Beitrag von JonasHülsmann »

Hallo,
danke für die Antwort.
Rein aus Interessensgründen, wie kann ich dieses Problem vermeiden?
Einfach nach dem Grundsatz "Rekursiv geht schief" auf eine Iteration setzten oder lässt sich das Problem auch rekursiv so lösen, dass das Problem nicht auftritt?
Gruß Jonas

m_flaig
Moderator
Moderator
Beiträge: 272
Registriert: 27. Sep 2009 14:02

Re: Übung08

Beitrag von m_flaig »

Hallo,

ja, iterativ wäre eine Lösung.
Führt man das Java-Program mit einer Console aus, kann man z.B. auch mit der Option -Xss die Stackgröße verändern.
Z.B. -Xss512k setzt die Stackgröße auf 512KB.
Alternativ mal google Fragen, da findet man bestimmt einiges zu dem Thema =)

Viele Grüße!

Antworten

Zurück zu „AI 2“