PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Schleife



neocrom
25.03.2009, 15:19
Hey ich schreibe gerade Game Of life vlt. kennts einer von euch ... mein Prob ist das er die Zählschleifen überhaupt nicht durchläuft O.o wo ist der Fehler?
... btw die Ganzen System.out.println(

System.out.println("Treffer bei ("+x+","+y+") !");
for(int b=-1;b==1;b++)
{
System.out.println("Schleifendurchlauf für x , x=: "+b);
for (int a=-1;a==1;a++)
{
System.out.println("Schleifendurchlauf für y , y=: "+a);
if (field[x+a][y+b][0]==true)
{
System.out.println("Nachbar+1");
i++;
}
}
}

blackberry
25.03.2009, 15:34
Ich glaube du weißt nich genau wie FOR funktioniert...
Die Syntax ist wie folgt:
for( A ; B; C )
B steht dabei für die Bedingung, die erfüllt sein muss, damit der Schleifenkörper ausgeführt wird.
Dies wird bei FOR jeweils beim Eintreten in die Schleife und beim Beenden eines Durchgangs getan.
Das Resultat dieses Vergleichs entscheidet darüber, ob nochmal in den Schleifenkörper gesprungen wird!

Beispiel:
Dein Code:
for(int b=-1;b==1;b++)
int b = -1 ist die Initialisierung und weist der Variable b den Wert -1 zu, welche vom Typ int ist!
Nun kommt der Fehler:
b == 1
Java interpretiert das wie folgt: "tritt in die Schleife ein, wenn b gleich eins ist und wiederhole so lange, bis b ungleich eins ist"
Da b nun aber bereits zu Anfang -1 ist, wird diese Bedingung nicht erfüllt - diese Schleife wird nie ausgeführt!
Was du vielleicht meinst is:
b < 2
... solange b kleiner als zwei ist.


mfG. BlackBerry

neocrom
25.03.2009, 15:39
omg ja richtig *vor den Kopf hau* hatte denn boolschen wert falsch in erinnerung ( java ist ein weilchen her) hmm was auch ginge wäre <=1 ja danke mfg neo

AlterHacker
25.03.2009, 15:40
Ich weiß zwar nicht was du mit der Schleife da machen willst, aber ich würde das so realisieren:

for(int x = 0; x < FELDER_X; x++){
for(int y = 0; y < FELDER_Y; y++){
//Hier kannst du dann auf dein Array zugreifen, also für Game of life etwa so:
//getLivingNeighbours kannste dann ja schreiben ;)
if(getLivingNeighbours(x,y) < 3 || getLivingNeighbours(x,y)>6) newField[x][y] = 0;//Bei <3 oder >6 war doch tot, glaubch
else newField[x][y] = 1;
//Fertig^^
}
}

neocrom
25.03.2009, 15:43
so ähnlich bei >3 und <2 aber gibts mit sicherheit auch mit anderen Werten =)

remixxx
28.03.2009, 17:54
für die letzte schleife empfehle ich eine while schleife

while(field[x+a][y+b][0]){
System.out.println("Nachbar+1");
}

i++ erscheint mir unlogisch und unötig, da du gar es gar nicht deklariert hast und die schleife sowieso nur durchlaufen wird wenn die bedingung true ist. Allerdings wird dann die ganze zeit "Nachbar+1" ausgegeben, was mir auch nicht gerade logisch erscheint. vlt wolltest du das hier erreichen:

while(field[x+a][y+b][0]){
int i=1;
System.out.println("Nachbar+ "+i);
i++;
}

field array muss natürlich datentyp boolean sein, sonst geht das schonmal gar nicht
1array=1datentyp, auch wenn 3 dimensional

edit: der fehler mit den anderen for schleifen wurde ja schon aufgeklärt

neocrom
28.03.2009, 18:24
Kompletten Quote entfernt - Read the rules


Ähm dir ist klar das dass nur ein Code ausschnitt war? natl. hab ich i deklariert aber nicht mit 1 das wäre ja unlogisch sonder mit -1 damit er sich selber nicht als Nachbar erkennt O.o ......

und natl. hab ich auch das field array obben deklariert

das ist ein ausschnitt aus einer FUnktion einer klasse der das array boolean field[][][]
übergeben wird :D

und das Problem hat sich längst erledigt =) aber trozdem ty für deinen Support und das Komplette Programm läuft der weilen in der Version 0.0.1 :D heißt ohne gui nur auf Konsole