tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
21
ZUGRIFFE
759
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
    Tag,

    ne Abfrage eines Array möchte nicht so wie ich will..


    Die Methode in der Klasse Spielfeld wird wie folgt aufgerufen,

    Code java:
    1
    2
    3
    4
    
    if (feld.spielfeldVoll(eingabe)) {
                 istGueltig = false;
                 consolenausgaben.BildschirmAusgaben("ReiheVoll");
            }

    die Methode,

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public boolean spielfeldVoll(int eingabe) {
        boolean istVoll = true;
                  for (int i = 5; i >=0; i--) {
                    if (spielfeld[i][eingabe]== ' ') {
                     istVoll = false;
                    }
                } 
        return istVoll;
        }

    spielfeld ist als klassen variable deklariert, also

    Code java:
    1
    2
    3
    4
    5
    6
    
    public class Spielfeld {
           
           char[][] spielfeld = new char [6][7];
    ..
    ....
    ......

    so, standart Wert true, also das die reihe "voll" ist.
    Wenn er die Reihe durch geht und er finden ein leeres Feld bzw. "leerzeichen" soll er istVoll auf false setzen, da die Reihe ja nicht voll ist. Dies macht er aber nicht.

    Grad kein Schimmer, wieso er nicht will..

    Zuvor ging es.

    Hatte Anfangs das komplette Programm in einer Klasse, wo spielfeld immer an die Methoden übergeben wird. (Das Array wurde am Anfang definiert).. jetzt nachdem ich mein Programm in verschiedenen Klassen aufgeteilt habe, mag er nicht mehr.
     

  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,

    Dies macht er aber nicht.
    Und das heißt was

    Wo und wie wird "spielfeld" denn gefüllt ?
    Wieso ist es sicher, dass dort KEIN Blank vorkommt ?

    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
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Deine Abfrage ist falsch.

    Code java:
    1
    
    if( spielfeld[i][eingabe] == '\u0000' )

    Muss sie lauten.
    Geändert von Herbertus (17.01.12 um 10:17 Uhr)
     

  4. #4
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Moin,


    Und das heißt was

    Wo und wie wird "spielfeld" denn gefüllt ?
    Wieso ist es sicher, dass dort KEIN Blank vorkommt ?

    Gruß
    Klaus
    das spielfeld wird in einer anderen Methode mit leerzeichen gefült und auf der Console ausgegeben. (leerzeichen, damit die | und __ nicht so gequetscht aussehen). In der Abfrage wird ja auf nen leerzeichen abgefragt ob ne reihe voll ist (mitm char) oder leer ist (bzw. nen leerzeichen ist)

    @Herbertu, klappt leider nicht,

    er führt die methode nun aus, aber erkennt nicht wenn ne reihe voll ist.


    Zuvor hat er die methode aus ausgeführt, hat aber immer "reihe voll" ausgegeben obwohl nur 1 feld belegt war.
    Geändert von phreeak (17.01.12 um 12:21 Uhr)
     

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

    Zitat Zitat von phreeak Beitrag anzeigen
    In der Abfrage wird ja auf nen leerzeichen abgefragt.
    Eben darum meine Frage

    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 !!

  6. #6
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    was meinst mit blank?! jedenfalls sagte er, dass die reihe voll war, obwohl nix drinnen ist, halt nur, die leerzeichen, mit dennen ich das Feld gefüllt habe. Darauf frage ich ja auch ab...


    Komischerweise klappt es ja im ersten Programm, wo alles in einer Klasse steht. Nach der aufteilung klappt es aber nimmer. <.<
     

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

    Zitat Zitat von phreeak Beitrag anzeigen
    was meinst mit blank?!
    na, Leerzeichen (auf Englisch) :-D

    Zitat Zitat von phreeak Beitrag anzeigen
    jedenfalls sagte er, dass die reihe voll war, obwohl nix drinnen ist, halt nur, die leerzeichen, mit dennen ich das Feld gefüllt habe. Darauf frage ich ja auch ab...
    Also: Dein ' ' steht nur mal für ein Blank (= Leerzeichen) oder in HEX 0x20 und ist was anderes als 0x00 oder eben '\u0000'.

    Worauf soll denn dort nur geprüft werden

    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 !!

  8. #8
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Also jetzt bin ich auch verwirrt.

    Wenn du auf ein LEERZEICHEN überprüfen willst, wäre meins natürlich auch falsch. Prüfst du, ob überhaupt irgendwas gesetzt ist, wäre meins richtig.

    Kannst du es bitte nochmal SAUBER formulieren (Eventuell kannst du auch einfach nur mehr Code einfügen, damit es nachvollziehbar wird, was du willst)
     

  9. #9
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    Kp

    ich fülle das Spielfeld so

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
        public void setzeSpielfeld() {
                   
                   for(int i = spielfeld.length - 1; i >= 0; i--) {
              for(int j = spielfeld[i].length - 1; j >= 0; j--) {
                  spielfeld[i][j] = ' ';
              }
           }
           zeigeSpielfeld();      
        }

    also mitm normalen leerzeichen.....

    hier,

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
        public int setzeSpielstein(int feld, char spieler) {
            boolean istWahr = false;
            int reihe = 0;
            for (int i = spielfeld.length - 1; i >= 0 && !istWahr; i--) {
                if (spielfeld[i][feld]== ' ') {
                    spielfeld[i][feld] = spieler;
                    istWahr = true;
                    reihe = i;
                }
            }
            zeigeSpielfeld(); 
            return reihe;
        }

    frag ich die reihe ebenfalls ab, um den Spielstein zusetzen..er geht die reihe von unten z.B 5,0 nach oben hoch und setzt den Spielstein erst dann, wenn spielfeld[x][y] = ' ' ist... klappt hier wunderbar.

    aber das hier ist eh das kleinste Problem.. Hab auch noch Probleme mit meiner Subklasse (Kapier das mit der Subklasse noch nicht wirklich)

    Zitat Zitat von Herbertus Beitrag anzeigen
    Also jetzt bin ich auch verwirrt.

    Wenn du auf ein LEERZEICHEN überprüfen willst, wäre meins natürlich auch falsch. Prüfst du, ob überhaupt irgendwas gesetzt ist, wäre meins richtig.

    Kannst du es bitte nochmal SAUBER formulieren (Eventuell kannst du auch einfach nur mehr Code einfügen, damit es nachvollziehbar wird, was du willst)
    nein soll ur überprüft werden ob ein LEERZEICHEN drinnen ist...
     

  10. #10
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    So, man(! ). Nochmal neuer Post.

    Also es geht, wie ich gerade lesen konnte ja, wenn alles in einer Klasse steht.

    Dann zeig mal deine Klassen
     

  11. #11
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    das ganze programm oder die klasse?!
    Es funktionierte noch, als das Programm in einer Klasse war.. nachdem Aufteilen in Klassen klappte es aufeinmal nicht mehr..

    Das ganze Programm, wo es in einer Klasse war, hat ca. 450 zeilen..
    Die Klasse Spielfeld nun, wo es drinnen steht 216..

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    
    ackage viergewinnt_aufgabe2;
     
         /** ******************************************
         * Klasse die das Spielfeld setzt, anzeigt und den Spieler setzt
         ************************************************/
    public class Spielfeld {
           
           private char[][] spielfeld = new char [6][7];
         /** ******************************************
         * Sezt das Spielfeld
         ************************************************/     
        public void setzeSpielfeld() {
                   
                   for(int i = spielfeld.length - 1; i >= 0; i--) {
              for(int j = spielfeld[i].length - 1; j >= 0; j--) {
                  spielfeld[i][j] = ' ';
              }
           }
           zeigeSpielfeld();      
        }
         /** ******************************************
         * Zeigt das Spielfeld an
         ************************************************/      
        public void zeigeSpielfeld() {
            for (int i=0;i<6;i++) {
                for (int j=0;j<7;j++) {
                    System.out.print("|"+spielfeld[i][j]);
                }
                System.out.println();
                System.out.println("--------------");
            } 
                     for (int j=1;j<8;j++) {
                        System.out.print("|"+j); 
                     }
                     System.out.println("");
                     System.out.println();
        }
        
            /** ******************************************
         * Prüft Senkrechte, Waagerechte und Diagonale Zeilen ob es ein Sieger gibt
         * oder ob es Unentschieden endett
         * @param feld - Feld des Arrays
         * @param reihe - Reihe des Arrays
         * @param spieler - Aktueller Spieler
         ************************************************/    
        public char hatGewonnen(int feld, int reihe, char spieler) {
            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 = '?';
            }
            
            //vertikal nach unten
            
            int zaehler=0;
            int _reihe = reihe;
            int _feld = feld;
     
            for (int i = reihe; i<6;i++) {
                if (spielfeld[_reihe][_feld] == spieler) {
                _reihe++;    
                zaehler++;
                }
            }
            
            if (zaehler>=4){
                sieger = spielfeld[reihe][feld];
                return sieger;
            }
     
            sieger = hatGewonnenHor(feld, reihe, spieler, sieger);
            sieger = hatGewonnenDia(feld, reihe, spieler, sieger);
            
            return sieger;
        }
        
        /** ******************************************
         * Prüft Horizontal ob ein Gewinner feststeht
         * @param feld - Feld im Array
         * @param reihe - reihe die der Spieler angegeben hat
         * @param spieler - Aktueller Spieler
         * @param sieger - Zeigt den Sieger an
         ************************************************/    
        public char hatGewonnenHor(int feld, int reihe, char spieler, char sieger) {
             //horizontal nach rechts
            int _reihe = reihe;
            int _feld = feld;
            int z = feld;
            int zaehler = 0;
            for (int i = feld; i<7;i++) {
              if (spielfeld[_reihe][_feld] == spieler)  {
                    _feld++;
                    zaehler++;
              
              }
            }
            //nach links
            for (int c = feld; c>0;c--) {
                if (spielfeld[_reihe][z-1] == spieler)  {
                    z--;
                    zaehler++;
                }
            }
     
            if (zaehler>=4){
                sieger = spielfeld[reihe][feld];
                return sieger;
            }
            return sieger;
        }
        
         /** ******************************************
         * Prüft Diagonal ob ein Gewinner feststeht
         * @param feld - Feld im Array
         * @param reihe - reihe die der Spieler angegeben hat
         * @param spieler - Aktueller Spieler
         * @param sieger - wenn Aktueller sieger ist, wirds in Sieger gespeichert
         ************************************************/   
        public char hatGewonnenDia(int feld, int reihe, char spieler, char sieger) {
             //diagonal nach links unten
            int _reihe = reihe;
            int _feld = feld;
            int z = feld;
            int j = reihe;
            int zaehler = 0;
            for (int i = feld, c = reihe;i>=0 && c<6;i--,c++) {
              if (spielfeld[_reihe][_feld] == spieler)  {
                  _reihe++;
                  _feld--;
                  zaehler++;
              }
            }
            // rechts oben
              for (int i = reihe, c = feld;i>0 && c<6;i--,c++) {
              if (spielfeld[j-1][z+1] == spieler)  {
                  j--;
                  z++;
                  zaehler++;
              }
            }
           
            if (zaehler>=4){
                sieger = spielfeld[reihe][feld];
                return sieger;
            }  
            
            
            //diagonal nach rechts unten
            _reihe = reihe;
            _feld = feld;
            z = feld;
            j = reihe;
            zaehler = 0;
            for (int i = reihe, c = feld; i<6 && c<7;i++,c++) {
              if (spielfeld[_reihe][_feld] == spieler)  {
                  _reihe++;
                  _feld++;
                  zaehler++;
              }
            }
            //links oben
            for (int i = feld, c = reihe;i>0 && c>0;i--,c--) {
              if (spielfeld[j-1][z-1] == spieler)  {
                  j--;
                  z--;
                  zaehler++;
              }
            }
            
            if (zaehler>=4){
                sieger = spielfeld[reihe][feld];
                return sieger;
            }
            return sieger;
        
        }
        
         /** ******************************************
         * Eingabe des Spielers wird in das Spielfeld gesetzt
         * @param feld - Feld des Arrays
         * @param spieler - Der Spieler, der am Zug ist
         ************************************************/  
        public int setzeSpielstein(int feld, char spieler) {
            boolean istWahr = false;
            int reihe = 0;
            for (int i = spielfeld.length - 1; i >= 0 && !istWahr; i--) {
                if (spielfeld[i][feld]== ' ') {
                    spielfeld[i][feld] = spieler;
                    istWahr = true;
                    reihe = i;
                }
            }
            zeigeSpielfeld(); 
            return reihe;
        }
        
        public boolean reiheVoll(int eingabe) {
        boolean istVoll = true;
                  for (int i = 5; i >=0; i--) {
                    if (spielfeld[i][eingabe]== ' ') {
                     istVoll = false;
                    }
                }
        return istVoll;
        }
    }


    ist die Spielfeld klasse.. ist das wichtigere..
    Mein Prof meinte vorhin, dass es an meinem "Laptop" liegt, dass ich was falsch eingestellt habe. Hab aber nix umgestellt....
     

  12. #12
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Naja, wenn es geht, wenn du es in einer Klasse hast und danach nicht mehr, dann hast du i-was falsch aufgemacht oder greifst falsch drauf zu. Daher wäre es ratsam auch alles zu posten, damit es nachvollziehbar wird, was du getan hast.
    Du rufst bestimmt Spielfeld von der anderen Klasse auf und da scheint ja i-was nicht zustimmen.

    Und nein, nur weil man es aufteilt und dann nicht mehr läuft, ist das kein Problem des Laptops. Das ist und bleibt Unfug.
     

  13. #13
    IluOMat IluOMat ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    4
    Mach dein Spielfeld mal static, damit du "immer auf dasselbe" Spielfeld zugreifst..

    Code :
    1
    
    private static char[][] spielfeld = new char[6][7];
     

  14. #14
    phreeak phreeak ist offline Mitglied Bronze
    Registriert seit
    Nov 2011
    Beiträge
    32
    dürfen keine statischen variablen benutzen bei der Aufgabe. Ist verboten


    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
    
         /** ******************************************
         * Checkt ob die Eingabe zwischen 0 und 6 und ob die Reihe voll ist oder nicht
         * @param eingabe - Eingabe des Spielers
         ************************************************/  
        public boolean istEingabeGueltig (int eingabe) {
            boolean istGueltig = true;
            boolean istVoll = true;
            Spielfeld feld = new Spielfeld();
            ConsolenAusgaben consolenausgaben = new ConsolenAusgaben();
            if (eingabe>6 || eingabe<0) {
                     consolenausgaben.BildschirmAusgaben("FalscheZahl");  
                     istGueltig = false;
                     istVoll = false;
            }
            if (istGueltig) {
                istVoll = feld.reiheVoll(eingabe);
            }
            
            if (istVoll) {
                 istGueltig = false;
                 consolenausgaben.BildschirmAusgaben("ReiheVoll");
            }
            return istGueltig;
        }

    hier wird die klasse aufgerufen bzw. reiheVoll()

    Hier soll er einfach in die Klasse Spielfeld in die Methode reiheVoll() und diese prüft ob die Senkrechte Reihe voll ist, wo der Spieler sein Spielsetin reinsetzen will... er gibt dann halt true oder false zurück an istEingabeGueltig()
    Geändert von phreeak (19.01.12 um 12:20 Uhr)
     

  15. #15
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Du erstellst dir jedes mal ein neues Spielfeld, dass ist dir klar, oder?
    So kann es auch nie voll sein, ....bzw. es ist immer nur 1Zug pro Spielfeld gespeichert.

    D.h. du musst das spielfeld-Array statisch machen oder die Klasse nur 1mal erstellen und dann immer wieder benutzen.

    also in der gepostet Klasse eine Variable einlegen, ...und darauf immer zugreifen.

    Code java:
    1
    2
    3
    4
    5
    6
    
    private Spielfeld sf = null;
     
    public DeineKlasse(){ // von der aufrufenden Klasse der Konstruktor
                                            // ich kenne ja dein Aufbau nicht und das hier ist nur ein Beispiel.
          sf = new Spielfeld();
    }

    So ungefähr. Und dann in der Methode istEingabeGueltig fragst du nach, ob sf.reiheVoll

    So benutzt du immer das selbe Spielfeld.
    Geändert von Herbertus (19.01.12 um 15:11 Uhr)
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 27.03.10, 00:10
  2. Datenbank abfrage gibt nichts aus
    Von DeSaarbrigger im Forum PHP
    Antworten: 5
    Letzter Beitrag: 16.09.07, 16:34
  3. Antworten: 6
    Letzter Beitrag: 13.01.07, 15:36
  4. Abfrage tut nichts. Tomaten auf den Augen?
    Von Eiszwerg im Forum PHP
    Antworten: 3
    Letzter Beitrag: 20.04.06, 17:59
  5. Array-Abfrage
    Von Sealtuagn im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 14.05.05, 23:26