hilfe, ich muss ein Sägezahn-Muster in Java programmieren und habe keine Ahnung wie. Ich soll 2 for schleifen benutzen.
*
**
***
****
*****
*
**
***
****
*****
so soll das dann aussehen
Die Frage ist doch, woran es hier hängt. Evtl. ist das Problem einfach, dass man es mit 2 Schleifen und nicht mit 3 Schleifen machen soll.
Denn wenn man es aufteilt:
man muss n Sternchen in eine Zeile schreiben
man muss n Zeilen mit den 1...n Sternchen schreiben
man muss das Muster wiederholen
Das wären dann 3 Schleifen und nicht 2 Schleifen, auf die es hinaus laufen soll.
Aber man kann da natürlich überlegen, ob man das wirklich so braucht. Nehmen wir einfach einmal an, dass wir 3 Sternchen haben und 2 Wiederholungen:
- Die Anzahl der Zeichen pro Zeile kann man dann für jede Zeile aufschreiben:
1 1
2 2
3 3
4 1
5 2
6 3
Siehst Du da, wie Du aus der Zeilenzahl denn die zweite Zahl berechnen kannst? Der Reminder Operator (oft auch als Module bezeichnet, was mathematisch nicht 100% korrekt ist) könnte eingesetzt werden, aber der ist 0 basiert - ziehen wir mal einfach von beiden Zahlen 1 ab, damit wir auch mit 0 starten:
0 0
1 1
2 2
3 0
4 1
5 2
Also wenn wir die Zeilen mit 0 anfangen zu zählen, dann haben wir in jeder Zeile Zeilenindex % Sternchenzahl + 1
Damit könnten wir aus den beiden äußeren Schleifen (Musterwiederholung und Muster selbst) eine Schleife über die Zeilenanzahl machen.
Zur Einordnung machen wir einfach einmal etwas weiter
Jetzt könnte man sich noch überlegen, ob man die innere Schleife nicht auch los werden können. Wir könnten uns einfach die Zeile merken. Die zu zeichnende Zeile ist "". Dann starten wir immer bei der Darstellung und hängen da immer erst ein * an. Und nach der Ausgabe einer Zeile prüfen wir, ob wir am Ende eines Musters sind (oder vorab, ob wir am Start sind). Je nachdem, ob die Zeilennummer schon erhöht wurde ist es halt ein zeilennumer % sternchenzahl == 0 oder zeilennummer % sternchenzahl = sternchenzahl - 1.
Dann hätte man sogar nur eine einzige Schleife. Aber wie lesbar wird der Code? Wir wollen doch unseren Code lesen können. Und auch gerade am Anfang: Wir wollen den Code problemlos schreiben können!
Also was liegt denn da näher als Code wie:
Anforderung: Ein Muster aus einer Anzahl Sternchen soll n mal wiederholt werden
Das sind dann sehr kurze und einfach zu verstehende Methoden. Das wird oft auch als teile und herrsche bezeichnet. Teile ein Problem in viele kleine Probleme auf, die dann jedes für sich einfach zu lösen ist. Es ist also naheliegend, dies zu machen, statt zu versuchen, irgendwas zu "optimieren". (Eine Schleife über n*m oder zwei Schleifen mit n und m Durchläufen sind gleichwertig. Da ist also keine Optimierung!)
Kein "Hallo zusammen !" als Bergüßung bei einem allerersten Post
Kein "Vielen Dank !" zum Abschluß
Keinerlei eigene Lösungsansätze, sondern der Versuch sich um 2 Uhr Nachts eine Lösung zu erbetteln, nachdem man den Abend dann doch lieber anderweitig verbracht hat.
Man könnte auch mit 2 Schleifen statt 3 Schleifen auskommen, wenn man das Sternchen nicht wiederholt,
sondern einen String mit allen (maximale Anzahl) Sternchen erzeugt und dann die Anzahl Sternchen mit
Man könnte auch mit 2 Schleifen statt 3 Schleifen auskommen, wenn man das Sternchen nicht wiederholt,
sondern einen String mit allen (maximale Anzahl) Sternchen erzeugt und dann die Anzahl Sternchen mit
Wobei es mir natürlich mehr um den Prozess der Entwicklung und damit verbunden Clean Code ging. Und dann ist die Frage, in wie weit man Alternativen wie Streams auch als Schleife zählen würde... Unter dem Strich wird da ja sowas mit verbaut sein - ähnlich wie bei String::repeat
Aber statt einer Schleife, die zählt, kann man ja natürlich einen Stream dieser Zahlen nehmen und diese dann einfach in der gegebenen Reihenfolge abarbeiten.
Also ich kann mich noch an viele Dinge aus meinem Leben erinnern, aber Dinge die ich Samstags morgens um 2 Uhr gemacht habe gehören mit Sicherheit nicht dazu.
Daher vermute ich mal der Kollege weiß aktuell gar nicht mehr das er sich in diesem Forum angemeldet hat 🤣
P.S. Würde vorschlagen den Thread Richtung Hausaufgaben zu verschieben, möge er dort in Frieden ruhen ...