Objektreferenz

blackroya90

Mitglied
Hi!
ich brauche dringend Hilfe.. ich weiß nicht mehr weiter.

Also , ich habe hier eine Schleife, die einem Spieler eine bestimmte Anzahl an Spielkarten gibt. Jedes Mal soll die Spielkarte zufällig erstellt werden:



if ( spieler.length * kartenProSpieler > 52) {throw new VerteilungUnmoeglichException();}

else {
Random rand = new Random();
int randomIntFarbe = rand.nextInt(3);
int randomIntWert = rand.nextInt(12);



/* Schleifen-Index "i" kuemmert sich um die Spieler
* Schleifen-Index "j" kuemmert sich um die Anzahl der Karten pro Spieler */

for (int i= 0; i < spieler.length; i++) {



for (int j = 0; j < kartenProSpieler; j++) {


spieler.bekommeKarte(new Spielkarte(randomIntWert, randomIntFarbe));



}


}
}
}






Die Methoden funktionieren ALLE ; alles getestet worden.

Das Problem ist: die Schleife erstellt keine neuen Objekte, sondern merkt sich die Referenz auf diese eine Spielkarte beim ersten Erstellen und gibt dem Spieler und allen anderen Spielern dann immer die gleiche Karte und erstellt eben nicht random-mäßig jedes Mal ein neues Objekt.

Man kann in Java ja keine Objekte löschen, das macht der GC. Der tut es aber nicht, da er immer wieder erkennt, dass das Objekt noch referenziert wird(ist ja in einer Schleife).
Also funktioniert null-Referenz setzen und System.gc() auch nicht.

Ich weiß nicht weiter! Wenn das so nicht klappt, muss ich alle klassen und Methoden komplett neu machen! Das muss doch irgendwie gehen, dass man hier dem Spieler jedes Mal eine neu generierte Karte geben kann?!

Ich wäre sehr dankbar, wenn irgendjemand eine Idee hätte!
 

rme

Top Contributor
Meine Kristallkugel, die den restlichen Code kennt, behauptet, dass das Problem eher ist, dass du die Zufallszahlen nur einmal pro Mischvorgang erzeugst und hier:
Java:
 spieler[i].bekommeKarte(new Spielkarte(randomIntWert, randomIntFarbe));

dem jedem Spieler ganz oft die gleiche Karte gibst - allerdings nicht dieselbe, wie du glaubst. Verstehst du, was ich mein? ;)
 
Zuletzt bearbeitet:

blackroya90

Mitglied
Ja! Du hast recht! Wenn ich die Deklaration der rnd-Zahlen auch noch in die Schleife packe, dann klappts!
Hab ich total übersehen :)

Du hast mir den Abend gerettet, danke ! :)
 

rme

Top Contributor
Aber auch da kannst du nich ausschließen, dass die Karten so vergeben werden, wie das Spiel es gar nicht erlauben würde - 10 Buben oder so z.B.

Ich habe auch mal ein Kartenspiel gebastelt, da habe ich es so gemacht, dass ich eine Liste mit allen Karten erstellt habe und dann zufällige Indizes gewählt habe, deren Karten die Spieler dann bekommen haben - so konnte ich die verbleibende Liste auch gleich als Aufhebstapel verwenden. Und wenn dabei ein Index zweimal generiert wird, macht es nix, weil es beim nächsten Mal ja eine andere verbleibende Karte ist.
 
Zuletzt bearbeitet:

blackroya90

Mitglied
Ja, das stimmt. Aber das ist hier in meinem Fall nicht gefordert, weils um kein konkretes Kartenspiel geht. Das hier ist eher theoretisch - also könnte es in diesem fiktiven Spiel auch 10 Buben geben.
Nur das Kartenlimit ist 52.

mfg :)
 

Ähnliche Java Themen

Neue Themen


Oben