For Schleife wird nur einmal durchlaufen-Finde Fehler nicht

Serenity1994

Mitglied
Hallo,
ich bin noch blutiger Anfänger und komme nicht weiter. Ist eine Aufgabe aus der Uni, habe auch schon andere in der Uni gefragt, die wissen aber auch nicht weiter.
Meine For-Schleife wird nur einmal durchlaufen, dann stoppt die Schildkröte.
Ich würde gerne wissen wo mein Fehler liegt, finde ihn einfach nicht.
Über eine Antwort würde ich mich sehr freuen.


Code:
* @version eclipse JEE Neon, JavaSE-1.8
* Beschreibung: Turtle John
* @since 2017-05-18
* letzte Änderung am 22. Mai 2017
*/

public class TurtleJohnParameter {

    public static void main(String[] args) {

Turtle John = new Turtle();
int index = 0;
Console.init();

John.setFontSize(15);// Schriftgröße der Koordinaten

String richtung; // l = links, r = rechts
int steps; // Vergroesserungsabstand
int loops; // Anzahl der Windungen (also einmal herum um 360 Grad)
int counter; // Zaehler für die Windungen



//Konsole Anfang
Console.println("In welche Richtung soll die Kroete laufen? (l=links, r=rechts)");
richtung = Console.readLine();

Console.println("Wie viele Windungen?");
loops = Console.readInt();

Console.println("Vergroeserungsabstand?");
steps = Console.readInt();
// Konsole Ende

int schrittlaenge = steps;
counter = (int) (loops *4); // 1 Windung sind 4 Windungen
if (richtung =="l")
   
{//Beginn if-Schleife


       for (   index = 0;
               index < counter;
               index ++ )
   


{ //Beginn der Schleife

  John.setPenColor(Color.BLACK);
  John.forward(schrittlaenge);
 
  John.setPenColor(Color.RED);
  John.left(90);
  John.forward(schrittlaenge);
 
  John.setPenColor(Color.GREEN);
  John.left(90);
  John.forward(schrittlaenge);
 
  John.setPenColor(Color.BLUE);
  John.left(90);
  John.forward(schrittlaenge);
  John.left(90);

  double x1 = John.getX(); // liefert die x-koordinate
  double y1 = John.getY(); // liefert die y-koordinate
  John.label((int)x1 + "/"+ (int)y1);
 
  schrittlaenge= schrittlaenge+ steps;
}
}


else if  (richtung=="r")
   
    for (   index = 0;
            index < counter;
            index ++ )
       
    John.forward(schrittlaenge);

    { //Beginn der Schleife
{John.setPenColor(Color.BLACK);
John.forward(schrittlaenge);

John.setPenColor(Color.RED);
John.right(90);
John.forward(schrittlaenge);

John.setPenColor(Color.GREEN);
John.right(90);
John.forward(schrittlaenge);

John.setPenColor(Color.BLUE);
John.right(90);
John.forward(schrittlaenge);
John.right(90);

double x1 = John.getX(); // liefert die x-koordinate
double y1 = John.getY(); // liefert die y-koordinate
John.label((int)x1 + "/"+ (int)y1);


schrittlaenge= schrittlaenge+ steps;

}}//Ende for Schleife


    }//main

}//class
 

Robat

Top Contributor
Klassischer Fall von schlecht formatierten Code :)
Habe mal versuch halbwegs eine Struktur rein zu bringen. Jetzt schau dir mal alle öffnenden / schließenden geschweiften Klammern an und sag mir ob dir was auffällt ;)

Java:
else if  (richtung=="r")
    for (   index = 0; index < counter; index ++ )
             John.forward(schrittlaenge);
     { //Beginn der Schleife
           {
               John.setPenColor(Color.BLACK);
               John.forward(schrittlaenge);

               John.setPenColor(Color.RED);
              John.right(90);
              John.forward(schrittlaenge);
              
               //...
          }
     }//Ende for Schleife
 

Joose

Top Contributor
Formatiere deinen Code richtig dann ist dein Fehler auch ersichtlich ;)
Java:
* @version eclipse JEE Neon, JavaSE-1.8
* Beschreibung: Turtle John
* @since 2017-05-18
* letzte Änderung am 22. Mai 2017
*/

public class TurtleJohnParameter {

   public static void main(String[] args) {

       Turtle John = new Turtle();
       int index = 0;
       Console.init();

       John.setFontSize(15);// Schriftgröße der Koordinaten

       String richtung; // l = links, r = rechts
       int steps; // Vergroesserungsabstand
       int loops; // Anzahl der Windungen (also einmal herum um 360 Grad)
       int counter; // Zaehler für die Windungen

       //Konsole Anfang
       Console.println("In welche Richtung soll die Kroete laufen? (l=links, r=rechts)");
       richtung = Console.readLine();

       Console.println("Wie viele Windungen?");
       loops = Console.readInt();

       Console.println("Vergroeserungsabstand?");
       steps = Console.readInt();
       // Konsole Ende

       int schrittlaenge = steps;
       counter = (int) (loops *4); // 1 Windung sind 4 Windungen
       if (richtung == "l") { //Beginn if-Schleife
           for (index = 0; index < counter; index++) { //Beginn der Schleife
               John.setPenColor(Color.BLACK);
               John.forward(schrittlaenge);

               John.setPenColor(Color.RED);
               John.left(90);
               John.forward(schrittlaenge);

               John.setPenColor(Color.GREEN);
               John.left(90);
               John.forward(schrittlaenge);

               John.setPenColor(Color.BLUE);
               John.left(90);
               John.forward(schrittlaenge);
               John.left(90);

               double x1 = John.getX(); // liefert die x-koordinate
               double y1 = John.getY(); // liefert die y-koordinate
               John.label((int)x1 + "/"+ (int)y1);

               schrittlaenge = schrittlaenge + steps;
           }
       } else if (richtung == "r")
           for (index = 0; index < counter; index++)
               John.forward(schrittlaenge);

           { //Beginn der Schleife
               {
                   John.setPenColor(Color.BLACK);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.RED);
                   John.right(90);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.GREEN);
                   John.right(90);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.BLUE);
                   John.right(90);
                   John.forward(schrittlaenge);
                   John.right(90);

                   double x1 = John.getX(); // liefert die x-koordinate
                   double y1 = John.getY(); // liefert die y-koordinate
                   John.label((int)x1 + "/"+ (int)y1);


                   schrittlaenge = schrittlaenge + steps;

               }
           }//Ende for Schleife
   }//main
}//class

Anmerkungen zu deinem Code:

Variablennamen werden in lowerCamelCase geschrieben. Daher "Turtle john" und nicht "Turtle John".
Strings werden inhaltlich mit .equals() verglichen nicht mit ==

Bei richtiger formatierung sind Kommentare wie "//Beginn der Schleife" und "Ende for Schleife" unnötig
Es gibt keine if-Schleife --> www.if-schleife.de

Zu dem Fehler schaue dir den else Zweig genauer an!
Java:
       } else if (richtung == "r")
           for (index = 0; index < counter; index++)
               John.forward(schrittlaenge);

           { //Beginn der Schleife
               {
                   John.setPenColor(Color.BLACK);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.RED);
                   John.right(90);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.GREEN);
                   John.right(90);
                   John.forward(schrittlaenge);

                   John.setPenColor(Color.BLUE);
                   John.right(90);
                   John.forward(schrittlaenge);
                   John.right(90);

                   double x1 = John.getX(); // liefert die x-koordinate
                   double y1 = John.getY(); // liefert die y-koordinate
                   John.label((int)x1 + "/"+ (int)y1);


                   schrittlaenge = schrittlaenge + steps;

               }
           }//Ende for Schleife
   }//main
 

Serenity1994

Mitglied
Hallo,
vielen Dank füre eure Antworten.
Klappt jetzt auch, die For-Schleifen werden so oft durchlaufen wie sie sollen. :9
Danke:)
Ein Problem hab ich noch.
Schildi läuft nicht in einer Spirale, sondern in einem komischen Viereck.
Eigentlich müsste ja die Schrittlänge immer größer werden, sodass Schildi in einer vierecken Spirale läuft?
Hättest ihr da für mich noch einen Hinweis?
Hab schon vieles durchprobiert.:/

Code:
if (richtung.equalsIgnoreCase("l"))
   
    for (index = 0; index < loops; index++)
       
    { //Beginn der Schleife
        john.setPenColor(Color.BLACK);
        john.forward(schrittlaenge +steps);

        john.setPenColor(Color.RED);
        john.left(90);
        john.forward(schrittlaenge+steps);

        john.setPenColor(Color.GREEN);
        john.left(90);
        john.forward(schrittlaenge+steps);

        john.setPenColor(Color.BLUE);
        john.left(90);
        john.forward(schrittlaenge+steps);
        john.left(90);

        double x1 = john.getX(); // liefert die x-koordinate
        double y1 = john.getY(); // liefert die y-koordinate
        john.label((int)x1 + "/"+ (int)y1);

        schrittlaenge = schrittlaenge + steps;}

else if (richtung.equalsIgnoreCase("r"))
   
    for (index = 0; index < loops; index++)
      

    { //Beginn der Schleife
       
            john.setPenColor(Color.BLACK);
            john.forward(schrittlaenge+steps);

            john.setPenColor(Color.RED);
            john.right(90);
            john.forward(schrittlaenge+steps);

            john.setPenColor(Color.GREEN);
            john.right(90);
            john.forward(schrittlaenge+steps);

            john.setPenColor(Color.BLUE);
            john.right(90);
            john.forward(schrittlaenge+steps);
            john.right(90);

            double x1 = john.getX(); // liefert die x-koordinate
            double y1 = john.getY(); // liefert die y-koordinate
            john.label((int)x1 + "/"+ (int)y1);


            schrittlaenge = schrittlaenge + steps;

       
    }//Ende for Schleife
 

Joose

Top Contributor
Zeichne dir doch mal auf einem karierten Blatt Papier auf wie die Figur geht und wieviele Schritte immer notwendig sind ;)
 

Neue Themen


Oben