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?!?
/*Ball_v8.java*/
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) {
for (int i = 0; i < 50; i++) //Bestimmt die Position des balls
{
//Anweisungen
System.out.print("\r");
System.out.print(w);
for (int j = 0; j < i; j++) //Der Ball "Bewegt" sich (Leerzeichen)
{
//Anweisungen
System.out.print(" ");
}
System.out.print(b);
Thread.sleep(s);
}
for (int x = 48; x > -1; x--) //Bestimmt die Position des balls
{
//Anweisungen
System.out.print("\r");
System.out.print(w);
for (int y = 0; y < x; y++) //Der Ball "Bewegt" sich andere richtung(Leerzeichen)
{
//Anweisungen
System.out.print(" ");
}
System.out.print(b);
System.out.print(" ");
Thread.sleep(s);
}
}
}
}/*Ball_v8.java*/
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) {
for (int i = 0; i < 50; i++) //Bestimmt die Position des balls
{
//Anweisungen
System.out.print("\r");
System.out.print(w);
for (int j = 0; j < i; j++) //Der Ball "Bewegt" sich (Leerzeichen)
{
//Anweisungen
System.out.print(" ");
}
System.out.print(b);
Thread.sleep(s);
}
for (int x = 48; x > -1; x--) //Bestimmt die Position des balls
{
//Anweisungen
System.out.print("\r");
System.out.print(w);
for (int y = 0; y < x; y++) //Der Ball "Bewegt" sich andere richtung(Leerzeichen)
{
//Anweisungen
System.out.print(" ");
}
System.out.print(b);
System.out.print(" ");
Thread.sleep(s);
}
}
}
}
Das ist der Code den wir so umschreiben sollen das er genau mit 2 Schleifen genauso funktioniert, wir haben halt keine Ahnung
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++;
}
}
}
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!
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.