• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Komisches Phänomen! Java Code inside!

Mitglied seit
01.07.2000
Beiträge
1.062
Reaktionen
0
Code:
int getCardId()
{
	int l = WerteArray.length-1;
	Random rand = new Random();
	return (rand.nextInt(l));
}
	
int giveCard()		
{
	int cardID = getCardId();
		
	if(nochda[cardID] == false)
		giveCard();
	else
	{
		nochda[cardID] = false;
		return WerteArray[cardID];
	}
		
		return 99;
}

Also folgendes.
Die beiden Funktionen arbeiten zusammen. Die Funktion getCardId() bestimmt eine Zufallszahl im Bereich 0-52 und gibt diese zurück.
Die Funktion giveCard() prüft erstmal in dem Array nochda(boolsches Array), ob diese Karte schon gezogen wurde. Falls ja, so ruft er die Funktion nochmal auf (Rekursion), womit also eine neue Karte gezogen wird. Falls nein, so setzt er die Karte an der Stelle, die die Funktion getCardId() zurückgegeben hat auf false und gibt den Wert der Karte an der Stelle zurück.
Der Abschnitt return 99; sollte eigentlich nie erreicht werden. Trotzdem kommt es (sehr selten) vor, dass ich als Rückgabewert von der Funktion eine 99 kriege.
Weiß einer woran das liegt ?
Ist es irgendwas dummes, das ich übersehen habe ? :(
Plz hlp
 

Myxomat

Guest
Einmal davon abgesehen dass ein rekursiver Aufruf in vorliegendem Fall eine sehr ineffiziente Art der Programmierung darstellt...

Ich weiss nicht, wie Java mit Rekursionen umgeht, aber wenn die von sich-selber aufgerufene Funktion mit einem return WerteArray[cardID]; endet, und dann in die aufrufende Funktion zurückkehrt, fährt dann die aufrufende Funktion nicht weiter und endet dann logischerweise bei return 99;?

Oder funktioniert das nicht so in Java? :)
 
Mitglied seit
01.07.2000
Beiträge
1.062
Reaktionen
0
Ähm jo du hast recht. Hm wie würde ich das dann am besten lösen ?
Nach dem else noch eine If Abfrage um auf keinen Fall zu return 99; zu kommen ? Oder die Rekursion ganz weglassen ? Ich wüsste jedoch nicht wie das ohne Rekursion gehen soll.
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
mal ganz spontan:

int giveCard()
{
int cardID = getCardId();
while (nochda[cardID] == false) {
cardID = getCardId();
}
nochda[cardID] = false;
return WerteArray[cardID];
}
 

Myxomat

Guest
Oder benutze anstelle eines Arrays eine Liste, die dich einzelne Elemente hinzufügen und entfernen lässt, und bei der du die Anzahl vorhandener Elemente auslesen kannst. Ich denke sowas müsste es auch in Java geben. Dann nimmst du ein zufälliges vorhandenes Element und entfernst es danach. Keine Schlaufen oder Rekursionen nötig.
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
ach mir faellt gerade ein: ueberpruefe, ob das ueberhaupt terminiert.
 
Mitglied seit
01.07.2000
Beiträge
1.062
Reaktionen
0
Hm jo thx. Das sieht gut aus. Ich glaub ich sollte mal ne Pause machen.
Thx both
 
Oben