PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: geschachtelte For-Schleife oder Logikproblem



Der_Da_93
21.09.2008, 18:23
Hi,
Ich grüble gerade über ein Problem bei dem ich einfach nicht dahinterkomme.
Der Code ist ein Ausschnitt aus meinem TicTacToe-Programm.

/*Check for horizontal rows */
for(short x=0; x<2; x++){
for( short y=0; y<2; y++){
sum += stones[x][y];
}
if( (sum == 3) || (sum== 12)){
System.out.println("so");
return true;
}
else {sum =0;}

}

Und soll eben schauen, ob es 3 steine in einer horizontalen reihe gibt.
stones[][] ist ein 2D-Array mit jeweils 3 Elementen.
0 bedeutet das Feld ist leer.
1 bedeutet blauer Stein.
4 bedeutet roter Stein.

Irgendwie steh ich auf dem Schlauch.

Könnte mir jemand helfen ?

supersucker
21.09.2008, 20:54
Huaaa,

bei so einem Code


for(short x=0; x<2; x++){
for( short y=0; y<2; y++){
sum += stones[x][y];
}
if( (sum == 3) || (sum== 12)){
System.out.println("so");
return true;
}
else {sum =0;}

}

stellen sich ja einem die Nackenhaare hoch.

Vielleicht postest du mal lieber die gesamte Methode / Klasse, aus deiner Beschreibung heraus


Und soll eben schauen, ob es 3 steine in einer horizontalen reihe gibt.
stones[][] ist ein 2D-Array mit jeweils 3 Elementen.
0 bedeutet das Feld ist leer.
1 bedeutet blauer Stein.
4 bedeutet roter Stein.

Irgendwie steh ich auf dem Schlauch.


hab ich nämlich keine Ahnung was du nun willst, bzw. wo dein Problem ist.

Der_Da_93
21.09.2008, 21:10
Hi Supersucker, danke für deine Antwort.

Also irgendwie hab ich wohl n brett vorm kopf(muss wohl an der erkältung liegen).
Was nicht funktionieren tut:
die Methode isWon() gibt immer false zurück, auch wenn das stones-array mit einer vertikalen reihe belegt ist.



Huaaa,
bei so einem Code [...] stellen sich ja einem die Nackenhaare hoch.


Tja, mein erstes "richtiges" Java-Projekt. Wenns fertig geworden wäre, hätte ich's sowieso für ein paar Verbesserungsvorschläge gepostet.

Wär nett, wenn du mir noch erklären könntest was daran so schlimm ist, bzw. wie man's besser macht.

Der Code:
Main.java (http://paste.nn-d.de/620)
Gui.java (http://paste.nn-d.de/621)
Field.java (http://paste.nn-d.de/622)

bytepool
22.09.2008, 00:18
Hi,

dir ist schon klar dass deine for Schleifen ein Feld der groesse 2x2 abarbeiten? Das sollte auch schon das Problem sein, die if Abfrage kann nie wahr sein, gegeben dass die Zellen nur 0, 1 und 4 enthalten koennen.

supersucker meint mit Sicherheit die sehr eigenartige Formatierung von deinem Code. Auch wuerde ich persoenlich x und y nicht als Zaehlvariablen benutzen, sondern lieber i und j, aber das ist Geschmacksache.

mfg,
bytepool

supersucker
22.09.2008, 05:00
supersucker meint mit Sicherheit die sehr eigenartige Formatierung von deinem Code.

Ganz genau...:D

Das hier lesen kann nie schaden:

-> http://java.sun.com/docs/codeconv/CodeConventions.pdf

Zu deinem Problem hat ja bytepool schon geantwortet......

Der_Da_93
22.09.2008, 17:04
Danke.
War ja mal wieder ne sehr simple Lösung.
(Also ein typisches Der_Da_93-Problem):-)

Werde ich vlt. heut abend(falls ich zeit hab, das programm korrigieren).
Falls es dann noch fragen geben sollte, werde ich mich natürlich melden.

Gibt es sonst noch irgendwelche Verbesserungsvorschläge an meinem Code,
ich meine jetzt nicht nur Layout-technisch, sondern auch so Sachen, wie , gute Abbildung in Klassen, Methoden etc. ?

Der_Da_93
24.09.2008, 19:35
Wieder ein kleines Problemchen, aber wahrscheinlich stehe ich nur auf dem Schlauch.

meine Gui() Klasse besitzt inzwischen bestimmte Methoden z.B. setRedWon() o.ä.
Das Problem ist, dass ich diese,aus Methoden der Main heraus, nicht aufrufen kann. ( in der public static int main() wird die Gui() allerdings instanziert.

Also so:
Main.main() macht: Gui g = new Gui()
g.ruft über MouseListener Main.FieldClicked auf
FieldClicked, soll jetzt g.setRedWon() aufrufen, was allerdings nicht so funktioniert.

*nicht funktionieren heisst: g cannot be resolved ( was das heisst hab ich schon verstanden)

saeckereier
24.09.2008, 20:32
Womit programmierst du?
Nimm Eclipse, dann kommst du nicht auf die Idee nicht vorhandene Variablen zu benutzen..
.
.
.
EDIT (autom. Beitragszusammenführung) :
.
Und mit so wenig Code kann man praktisch nix dazu sagen ausser dass die Variable g in dem Kontext nicht existiert.

Der_Da_93
24.09.2008, 23:40
Ok, ich hab das Problem gefunden g wurde in Main.main() deklariert, und nicht in Main global.
Eigentlich hätte ich ja selbst draufkommen können....