Sägezahn-Muster

JavaAnfeangerHelp

Neues Mitglied
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
 

Marinek

Bekanntes Mitglied
Hi,
der Trick liegt darin zunächst ein gewisses Muster festzustellen.

Was könnte das sein?

Ansonsten ist es schwer so gänzlich ohne Quellcode entsprechende Hilfe zu leisten.

Schöne Grüße
Martin
 

KonradN

Super-Moderator
Mitarbeiter
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
Java:
public void wiederholeMuster(int anzahlWiederholungen, int anzahlSternchen) {
    for (count = 0; count < anzahlWiederholungen; count++) {
        musterAusgeben(anzahlSternchen);
    }
}

Anforderung: Ein Muster wie in der Aufgabe beschrieben mit maximal n Sternchen soll ausgegeben werden
Java:
void musterAusgeben(int anzahlZeilen){
    for (int count = 1; count <= anzahlZeilen; count++) {
        schreibeZeileMitSternchen(count);
    }
}

Anforderung: Schreibe eine Zeile mit n Sternchen:
Java:
void schreibeZeileMitSternchen(int anzahlSternchen) {
    for (int count = 0; count < anzahlSternchen; count++) {
        System.out.print("*");
    }
    System.out.println();
}

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!)
 

Ernesto95

Bekanntes Mitglied
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.

Und trotzdem bekommt er hier ausführliche Hilfe.

Manche hier sind einfach zu nett für diese Welt 🤣
 

Barista

Top Contributor
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

Java:
sternchen.substring(0, anzahl)

raus holt.
 

mihe7

Top Contributor
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

Java:
sternchen.substring(0, anzahl)

raus holt.
Oder man nimmt einfach String#repeat :p

Nachtrag: man könnte natürlich auch mit einer Schleife auskommen.
Nachtrag 2: Code wieder entfernt, ich will ja hier nicht die Hausaufgabe machen.
 

KonradN

Super-Moderator
Mitarbeiter
Nachtrag: man könnte natürlich auch mit einer Schleife auskommen.
Das hatte ich ja auch beschrieben :)

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.
 

Ernesto95

Bekanntes Mitglied
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 ...
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Sägezahn Muster Programm Java Basics - Anfänger-Themen 2
L Sägezahn Muster Java Basics - Anfänger-Themen 4
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
1 Wie dieses Muster am einfachsten erkennen? Java Basics - Anfänger-Themen 32
H Muster mit verschachtelten Schleifen kreieren. Java Basics - Anfänger-Themen 2
Yasemin bahar Muster erkennen Java Basics - Anfänger-Themen 13
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
F Quadrat Mit Muster Java Basics - Anfänger-Themen 15
J Muster und Schleifen Java Basics - Anfänger-Themen 33
R 2D Arrays mit vorgegebenem Muster Java Basics - Anfänger-Themen 2
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
J Strukturierung mit MVC Muster Java Basics - Anfänger-Themen 20
J Array Muster mit true und false Java Basics - Anfänger-Themen 6
C Muster programmieren Java Basics - Anfänger-Themen 4
C Muster programmieren Java Basics - Anfänger-Themen 4
E Muster auf der Konsole ausgeben lassen (Schleifen) Java Basics - Anfänger-Themen 7
arti28 Erste Schritte For-Schleifen und While-Schleifen, String als Muster ausgeben. Java Basics - Anfänger-Themen 3
L Java Muster Java Basics - Anfänger-Themen 1
Todesbote String auf Muster überprüfen Java Basics - Anfänger-Themen 19
C Array Zickzack Muster Java Basics - Anfänger-Themen 3
P RegEx Muster mehrfach treffen Java Basics - Anfänger-Themen 2
M Muster erkennen. Idee: Fassade. Java Basics - Anfänger-Themen 3
Dit_ Regex | Muster {a}{b}{c} Java Basics - Anfänger-Themen 7
pindakaas Compiler geht nicht (Dekorator Muster) Java Basics - Anfänger-Themen 18
M Datentypen Strings nach Muster auslesen und verarbeiten Java Basics - Anfänger-Themen 5
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
R Muster ausgeben Java Basics - Anfänger-Themen 4
H Muster ausgeben Java Basics - Anfänger-Themen 25
G String auf Muster prüfen Java Basics - Anfänger-Themen 5
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
C Muster mit Zweidimensionalen Arrays Java Basics - Anfänger-Themen 18
0 Applet mit folgendem Muster erstellen Java Basics - Anfänger-Themen 12
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
Z Muster Java Basics - Anfänger-Themen 9
J nach Muster in String suchen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben