Wir haben die Aufgabe bekommen den Code den wir mit 5 Schleifen selber gemacht haben mit genau 2 Schleifen zu machen und ich hab keine Ahnung Hilfe?!?

3 Antworten

Funktioniert er so: public class Ball_v8 {

  public static void main (String[] args) throws InterruptedException {  

    String w = "|"; //Hier Zeichen für Wand ändern

    String b = "O"; //Hier Zeichen für Ball ändern

    int s = 20; //Hier Geschwindigkeit verändern, höhere Zahl = Langsamer

    System.out.print("             " + w);

    int z = 0;

    while (z < 51) {

      // Schleife 1: Bewegung nach rechts

      for (int i = 0; i < 50; i++) {

        System.out.print("\r" + w);

        for (int j = 0; j < i; j++) {

          System.out.print(" ");

        }

        System.out.print(b);

        Thread.sleep(s);

      }

      // Schleife 2: Bewegung nach links

      for (int i = 50; i > 0; i--) {

        System.out.print("\r" + w);

        for (int j = 0; j < i; j++) {

          System.out.print(" ");

        }

        System.out.print(b + " ");

        Thread.sleep(s);

      }

      z++;

    }

  }

}


moritzpunkt 
Fragesteller
 16.03.2023, 11:13

Der Code funktioniert zwar, aber wir sollen genau zwei schleifen benutzten und bei dem Code den du reingeschickt hattest sind bei beiden schleifen 2 for schleifen und eine while schleife, Also insgesamt sind in dem code 5 schleifen

Aber troztdem danke!

0

Hmm, mit genau zwei Schleifen weiß ich auch nicht, wie es gehen soll. Du hast ja einmal die Schleife außenrum, die bewirkt, dass sich die Animation wiederholt und danach braucht man eine gerade Anzahl an Schleifen, weil man für die Hinweg und den Rückweg ja jeweils gleich viele Schleifen braucht.

Ich hätte eine Lösung mit einer Schleife (Die Wiederholungen der Leerzeichen werden durch die String.repeat(x) Funktion gemacht und das print wird in einer rekursiven Funktion gemacht, damit man keine weitere Schleife braucht). Vielleicht fällt dir ja was sinnvolles ein, wo du noch eine Schleife einbauen kannst.

public class Ball_v8 {
    private static final char wand = '|'; // Hier Zeichen für Wand ändern
    private static final char ball = 'O'; // Hier Zeichen für Ball ändern
    private static final int sleepTime = 20; // Hier Geschwindigkeit verändern, höhere Zahl = Langsamer

    public static void main(String[] args) throws InterruptedException {
        while (true) { // Endlosschleife (Schleife Nr. 1)
            printLine(0);
        }
    }

    private static void printLine(int ballPosition) throws InterruptedException {
        // Wenn das Ende der Zeile erreicht ist, Rekursion beenden
        if (ballPosition == 50) return;
        
        // Ansonsten einmal die aktuelle Position zeichnen
        System.out.print("\r" + wand + " ".repeat(ballPosition) + ball + " ".repeat(49-ballPosition) + wand);
        Thread.sleep(sleepTime);
        // dann einmal die nächste Position zeichnen (die von sich auch auch wieder die nächste aufruft)
        printLine(ballPosition + 1);
        // und nochmal die aktuelle Position, damit der Ball wieder zurückrollt
        System.out.print("\r" + wand + " ".repeat(ballPosition) + ball + " ".repeat(49-ballPosition) + wand);
        Thread.sleep(sleepTime);
    }
}

Ich hab 0 Ahnung vom programmieren

ChatGPT-3 aber schon ....!

Klar, hier ist eine alternative Version des Codes mit nur 2 Schleifen:

csharp

Copy code

public class Ball_v8 {

  public static void main(String[] args) throws InterruptedException {

    String w = "|"; //Hier Zeichen für Wand ändern

    String b = "O"; //Hier Zeichen für Ball ändern

    int s = 20; //Hier Geschwindigkeit verändern, höhere Zahl = Langsamer

    System.out.print("             " + w);

    int z = 0;

    int i = 0;

    int dir = 1; // Richtung des Balls, 1 = rechts, -1 = links

    while (z < 51) {

      // Ball "bewegt" sich in eine Richtung

      System.out.print("\r");

      System.out.print(w);

      for (int j = 0; j < i; j++) {

        System.out.print(" ");

      }

      System.out.print(b);

      if (i == 49) {

        dir = -1; // Richtung wechseln, wenn Ball am rechten Rand ist

      } else if (i == 0) {

        dir = 1; // Richtung wechseln, wenn Ball am linken Rand ist

        z++; // Zähler für Anzahl der Bewegungen erhöhen

      }

      i += dir;

      Thread.sleep(s);

    }

  }

}

In dieser Version wird die Bewegung des Balls mit nur einer Schleife umgesetzt. Der Ball bewegt sich in eine Richtung bis er den Rand erreicht, dann wird die Richtung umgedreht und der Ball bewegt sich in die entgegengesetzte Richtung. Der Zähler "z" zählt die Anzahl der Bewegungen und die Schleife endet, wenn der Ball 51 Mal hin und zurück bewegt wurde.