Variablen Inhalt verschwindet

phreeak

Mitglied
Tach auch,

irgendwie ein merkwürdiges Problem... Der inhalt einer Variable verschwindet, wenn ich sie an eine 2. Prozedure übergebe..

Java:
public static char zeigeErgebniss() {
        boolean istunentschieden = true;
        char sieger = ' ';
        for(int i = spielfeld.length - 1; i >= 0; i--) {
          for(int j = spielfeld[i].length-1; j >= 0; j--) {
              if(spielfeld[i][j] == ' ')
              istunentschieden = false;
          }
        }
        
        if (istunentschieden) {
              sieger = '?';
        }

 
        sieger = checkSenkrecht(sieger); 
        sieger = checkWaagerecht(sieger);

        return sieger;
    }

Java:
public static char checkSenkrecht(char sieger) {
        for (int k = 6;k>=0;k--) {
                if (spielfeld[0][k] == spielfeld[1][k] 
                        && spielfeld[1][k] == spielfeld[2][k] 
                        && spielfeld[2][k] == spielfeld[3][k]) {
                sieger = spielfeld[0][k];
                
                }
                if ((spielfeld[1][k] == spielfeld[2][k] 
                        && spielfeld[2][k] == spielfeld[3][k] 
                        && spielfeld[3][k] == spielfeld[4][k])) {
               sieger = spielfeld[1][k];
                    
                }
                if ((spielfeld[2][k] == spielfeld[3][k] 
                        && spielfeld[3][k] == spielfeld[4][k] 
                        && spielfeld[4][k] == spielfeld[5][k])) {
              sieger =  spielfeld[2][k];         
                }
          } 
        return sieger;
    }
      /** ******************************************
     * Prüft ob Waagerecht ein Spieler 4 Steine nebeneinander hat
     * @return sieger - Gibt den Sieger zurück
     ************************************************/       
    public static char checkWaagerecht(char sieger) {

      for (int k = 5;k>=0;k--) {
                if (spielfeld[k][0] == spielfeld[k][1] 
                        && spielfeld[k][1] == spielfeld[k][2] 
                        && spielfeld[k][2] == spielfeld[k][3]) {
                sieger =  spielfeld[k][0];
                
                }
                if ((spielfeld[k][1] == spielfeld[k][2] 
                        && spielfeld[k][2] == spielfeld[k][3] 
                        && spielfeld[k][3] == spielfeld[k][4])) {
                sieger =  spielfeld[k][1];
                    
                }
                if ((spielfeld[k][2] == spielfeld[k][3] 
                        && spielfeld[k][3] == spielfeld[k][4] 
                        && spielfeld[k][4] == spielfeld[k][5])) {
                sieger =  spielfeld[k][2];
                }
                
                if ((spielfeld[k][3] == spielfeld[k][4] 
                        && spielfeld[k][4] == spielfeld[k][5] 
                        && spielfeld[k][5] == spielfeld[k][6])) {
                sieger =  spielfeld[k][3];
                    
                }
             
        }
   return sieger;
    }

So er prüft er ob das komplette Array Feld voll ist, dann nimmt er das ergebniss mit nach checkSenkrecht, wenn dort kein Gewinner feststeht, wird auch nix in die Variable geschrieben und das was ich übergeben habe, kommt auch so ins return..

so nun soweit, klappt das auch, aber sobald er dann in die checkWaagerecht geht (gleiche Spiel zuvor), schluckt er den Inhalt der Variable... also sollte nen sieger oder nen unentschieden vorher gewesen sein.

Hatte vorher beide for schleifen in zeigeErgebniss() und dort war es das selbe. daher hab ich se mal getrennt..


ps: nicht wundern über die Abfrage... geht wahrscheinlich viel einfacher, aber irgendwie fehlt mir da die phantasie.. ;D
 
Zuletzt bearbeitet:
Moin,

ich durchblicke Deine Code nicht wirklich, nachstellbar ist er auch nicht !

Was genau kann denn in den einzelnen Feldern des Arrays "spielfeld" stehen :confused:

Hast Du mal mit dem Debugger geschaut, was zu welchen Zeitpunkt auf "sieger" steht ?

EDIT: warum übergibst Du diese Variable "sieger" überhaupt an Deine Funktionen? Innendrin wird damit doch gar nichts gemacht ....

Gruß
Klaus
 
der überprüft ob in dem 2D Array horizontal oder vertikal 4 gleiche werte hintereinander stehen... (nen char) ist nen 4Gewinnt Spiel...

übergib den sieger mit, damit der nicht verloren geht.. Wenn ich den "sieger" nicht mitnehme in die andere Prozedure, wird sie ja unfreiwillig überschrieben, da ich dann in den prozeduren nen sieger deklarieren muss und den auch nen Anfangswert zuweisen muss und den dann mit return zurück gibt, falls in der for schleife nix zutrfft.

daher z.B wenn wenn das letzte feld im array vergeben ist, checkt er ob im array alles belegt ist, gibt dann '?' aus, da das Array voll ist, nimmt es mit in die prozedure und checkt ob senkrecht einen sieger gibt, falls im letzte Spielzug sich was verändert hat, wenn nix ist, returned er das '?' wieder, checkt ob waagerecht was ist (nimmt '?' mit) und falls nicht return er ebenfalls das '?'.. ergebniss unentschieden.. falls er aber in waagerecht 4 gleiche in einer Reihe findet ist sieger = <irgendwas> und gibt das mit return dann wieder zurück..


so, mit der ersten prozedure macht er das auch. Aber in der 2. ist "sieger" aufeinmal leer, obwohl keine 4 in einer reihe sind und er daher in sieger nix reinschreibt. Also müsste in return noch '?' stehen oder der inhalt, der in der prozedure zuvor eingegeben wurde, falls 4 richtige gefunden wurden.

schwer zu erklären :D
 
Zuletzt bearbeitet:
Zurück