ERLEDIGT
NEIN
NEIN
ANTWORTEN
21
21
ZUGRIFFE
759
759
EMPFEHLEN
-
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.
-
17.01.12 07:50 #2
Moin,
Und das heißt wasDies macht er aber nicht.
Wo und wie wird "spielfeld" denn gefüllt ?
Wieso ist es sicher, dass dort KEIN Blank vorkommt ?
Gruß
KlausEs 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 !!
-
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)
-
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)
-
17.01.12 12:20 #5Es 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 !!
-
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. <.<
-
17.01.12 12:27 #7Es 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 !!
-
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)
-
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)
nein soll ur überprüft werden ob ein LEERZEICHEN drinnen ist...
-
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
-
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....
-
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.
-
Mach dein Spielfeld mal static, damit du "immer auf dasselbe" Spielfeld zugreifst..
Code :1
private static char[][] spielfeld = new char[6][7];
-
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)
-
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
-
if-Abfrage mit Datenbank, wenn nichts gefunden wird
Von hellobaby01 im Forum PHPAntworten: 3Letzter Beitrag: 27.03.10, 00:10 -
Datenbank abfrage gibt nichts aus
Von DeSaarbrigger im Forum PHPAntworten: 5Letzter Beitrag: 16.09.07, 16:34 -
bei sql Abfrage zeigt die Seite nichts mehr an
Von FWE im Forum PHPAntworten: 6Letzter Beitrag: 13.01.07, 15:36 -
Abfrage tut nichts. Tomaten auf den Augen?
Von Eiszwerg im Forum PHPAntworten: 3Letzter Beitrag: 20.04.06, 17:59 -
Array-Abfrage
Von Sealtuagn im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 14.05.05, 23:26





Zitieren


Login





