Klassenvariable enthält falschen Wert

raruk

Grünschnabel
#1
Hallo Miteinander,

Ich programmiere im Moment ein Yahtzee mit Multiplayer-Funktion. Anfangs generiere ich 2 neue Klasseninstanzen der Klasse Player und übergebe ID und Name:
Code:
Player1 = new Player(1, player1);
            Player2 = new Player(2, player2);
Würfeln, Score rechnen usw. funktioniert alles. Wenn ich nun beim Spielerwechsel den Score vom Spieler1 setzen will:
Code:
if (Player1.turn)
{
     setLocZwischenstand() //Diese funktion liest mir alle Textboxen mit den Werten aus und speichert sie in einem LOKALEN string[]
     Player1.ZwischenStand = LocZwischenStand; 
}
wenn ich nun aus der setLocZwischenstand()-Funktion raus komme, sind die ZwischenStand-Variablen der Klasseninstanzen bereits beide gesetzt?! :S (Ich greife in dieser Funktion niemals auf die Klassenvariable zu.)

Ich versuche den Fehler seit gestern Abend zu beheben und finde einfach nichts...

hoffe, dass mir jemand helfen kann.
Vielen Dank im voraus.

Gruss Beni
 

raruk

Grünschnabel
#3
Hier noch der Code von der setLocZwischenstand-Methode

Code:
 private string[] setLocZwischenstand()
{
            LocZwischenStand[0] = txtEiner.Text;
            LocZwischenStand[1] = txtZweier.Text;
            LocZwischenStand[2] = txtDreier.Text;
            LocZwischenStand[3] = txtVierer.Text;
            LocZwischenStand[4] = txtFuenfer.Text;
            LocZwischenStand[5] = txtSechser.Text;
            LocZwischenStand[6] = txtOben.Text;
            LocZwischenStand[7] = txtBonus.Text;
            LocZwischenStand[8] = txtTotalOben.Text;
            LocZwischenStand[9] = txtDreiGleiche.Text;
            LocZwischenStand[10] = txtVierGleiche.Text;
            LocZwischenStand[11] = txtFullhouse.Text;
            LocZwischenStand[12] = txtKleineStrasse.Text;
            LocZwischenStand[13] = txtGrosseStrasse.Text;
            LocZwischenStand[14] = txtChance.Text;
            LocZwischenStand[15] = txtYahtzee.Text;
            LocZwischenStand[16] = txtTotal.Text;
            return LocZwischenStand;
}
folgendermassen sieht meine Player-Klasse aus:

Code:
public Player(int id, string name)
{
            this.ID = id;
            this.Name = name;
}
private string[] zwischenStand;
public string[] ZwischenStand
{
         get
        {
                return zwischenStand;
        }
        set
       {
                zwischenStand = value;
        }
}
public int ID { get; set; }
public string Name { get; set; }
public bool turn { get; set; }
public bool[] buttons { get; set; }
Gruss und Danke
 

Spyke

Capoeirista
Premium-User
#4
Ganz habe ich das Problem nicht verstanden, aber ich denke mal dein problem ist das player2 den gleichen zwischenstand hat wie player1 oder?

Soweit ich das sehe ist ja LocZwischenstand ein Array welches du nur einmal instanziierst und dieses übergibst du dann immer an deine player.

Und genau das scheint mir dein Problem zu sein, Arrays sind referenztypen, das heißt im prinzip gibst du immer nur die speicheradresse des arrays weiter.
Da du immer auf dem gleichen Array arbeitest haben auch beide die gleichen Daten.

Erstell mal in deiner setLocZwischenstand Methode ein neues Array und gibt das an die player.
 

raruk

Grünschnabel
#5
Hey Spyke,
Genau das war das Problem.
Wie dumm von mir, dass ichs nicht gecheckt hab.
Vielen Dank!

Gruss Beni
 
Zuletzt bearbeitet: