tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
234
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    Tach auch,

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

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    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;
        }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    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
    Geändert von phreeak (05.12.11 um 19:48 Uhr)
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

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

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

    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
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    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
    Geändert von phreeak (05.12.11 um 23:18 Uhr)
     

Ähnliche Themen

  1. Inhalt zweier Variablen verbinden
    Von trancerlein im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 04.01.08, 01:20
  2. XSL Inhalt einer Variablen ist XML Pfad
    Von KrustyDerClown im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 20.07.06, 15:22
  3. Antworten: 7
    Letzter Beitrag: 01.05.06, 10:53
  4. Variablen auf inhalt prüfen
    Von Acki im Forum Java
    Antworten: 5
    Letzter Beitrag: 12.04.05, 09:06
  5. [asp.net]Variablen ohne Inhalt
    Von fluessig im Forum ASP
    Antworten: 3
    Letzter Beitrag: 25.11.02, 14:12