do while Schleife funktioniert nicht?

6 Antworten

Die Bedingung wird am Ende der Schleife geprüft, hier kann also nicht der Fehler sein. Es liegt wohl daran, dass Du viermal nach rechts drehst und nicht dreimal (siehe unten).

Es kann hieran liegen:

if(fliegeAmPlatz() | hindernisRechts())

Möglicherweise sind die Boolean-Funktionen fliegeAmPlatz und hindernisRechts() falsch, einfach testen, indem Du Dir folgendes anzeigen lässt:

//Debugcode
if(fliegeAmPlatz())System.out.println("Fliege ist am Platz"); else System.out.println("Fliege ist nicht am Platz);
if(hindernisRechts())System.out.println("Hindernis rechts"); else System.out.println("kein Hindernis rechts");
if(hindernisRechts()|hindernisRechts())System.out.println("Hindernis rechts"); else System.out.println("kein Hindernis rechts");

Dann siehst Du, wo es hackt.

Was soll hier das biteweise Oder |? Sollte es nicht das logische Oder || sein? Klappt zwar logischerweise (Wortspiel) auch, ist aber nicht stylisch.

Dann: Du drehst vier mal rechts, richtig wäre dreimal rechts.

for(int i=0;i<4;i++) // i=0,i=1,i=2,i=3 --> viermal, da die 0 auch ein Schritt ist!

warum nicht

for(int i=0;i<3;i++) // i=0,i=1,i=2 --> dreimal, da die 0 auch ein Schritt ist.

Check mal mit i<3 in der for-Schleife. Oder

for (int i=1;i<4;i++) // i=1,i=2,i=3 --> dreimal, da keine Null.

Hallo,

es liegt nicht an dem "!", dies ist lediglich eine Verneinung in der Syntax von Java. Also "while(!klatscheVorn());" bedeutet im Pseudo-Code, dass wenn der "do" Teil durchgelaufen ist, "Solange vorne keine Klatsche ist, soll die Schleife weiter ausgeführt werden".

Das erste was mir auffällt ist, wozu hast du eine for-Schleife zum drehen? Das heißt quasi, wenn fliegeAmPlatz() oder hindernisRechts() dann wird der Befehl linksDrehen() vier mal ausgeführt, egal ob dort ein Hindernis/Spinne ist oder nicht. Heißt also du stehst genau wieder davor. Lass die for-Schleife einfach mal komplett weg und versuche es dann erneut.

Das wäre jetzt auf die schnelle meine Idee.

Viel Erfolg :)

die for schleife ist in der if schleife. Deshalb dürfte es da keine Probleme geben. Und was meinst du mit dem ersten Absatz ? Die Schleife soll ja solange ausgeführt werden wie vorne keine Klatsche ist. (while(klatscheVorn()==false) liefert übrigens das gleiche Ergebnis)

0
@paul6800i

Mit meinem ersten Absatz wollte ich nur sagen dass es nicht an dem "!" liegt.

Spiel das doch einfach mal durch. Du gehst in deine Schleife rein, beim ersten Durchlauf mag die erste if-Bedingung nicht zutreffen, also wird ein Schritt gemacht. Dann jedoch im zweiten Durchlauf der do-while-Schleife trifft die erste if-Schleife zu, also startest du die for-Schleife, in dieser drehst du dich dann vier mal um 90°, hießt also du stehst wieder an der gleichen Stelle, was dann im dritten Durchlauf der do-while bedeutet, dass wieder die erste if-Bedindung zutrifft und das gleiche wieder gescheiht, heißt also du bleibst immer vor der Spinne oder dem Hindernis stehen, weil du dich immer nur einmal um 360° drehst.

1
@paul6800i

Nein, der Gedanke war, dass die Spinne sich nach vier Linksdrehungen von 90 Grad wieder in der Ausgangsposition befindet

0
@nikolaiki

Aber was bringt das denn, wenn die Spinne wieder in der Ausgangsposition ist und dennoch nicht weiter kommt? Ich dachte die Spinne solle einer Klatsche oder einem Hindernis ausweichen und sich dann drehen?!

1

Die DO-While schleife arbeitet so, daß der do{ } Part EINMAL ausgeführt wird und dann nur weitere Male, solang die Bedingung in While(bedingung) true ist.

Im Grunde genauso wie die while Schleife nur das halt EINMAL aufjedenfall die Schleife durchlaufen wird.

"!" verneint die Bedingung sprich aus true wird false und umgekehrt.

Also nach dem ersten Schritt wird die Schleife (inkl. Drehen) nicht mehr ausgeführt wenn "Klatsche vorn() == true" ist.

Könnte durchaus daran liegen, oder auch an dem Operator "|" in "fliegeAmPlatz() | hindernisRechts()", zumindest in C# verwende ich immer den doppelten "||", der einzelne führt manchmal zu seltsamen Ergebnissen - bin mir da in Java allerdings nicht sicher.

Das klingt bei dir jetzt so als würde nach dem ersten Durchlauf der schleife die DO-While Schleife genauso arbeiten wir eine While Schleife... Tut sie doch aber nicht while Schleife: testen ,wenn richtig ausführen, do while Schleife: ausführen, testen, wenn richtig wiederholen

0

Am einfachen | liegt es nicht, habe ich getestet

0

Was möchtest Du wissen?