Dr Java Muster ausgeben wie?

3 Antworten

Na ja, informiere dich Mal, wie Schleifen aussehen.

Du hast quasi zwei Wiederholungen:

Eine nach "unten" (du wiederholst die Schleife n mal) und eine Innere Schleife, die die Sternchen der aktuellen Zeile ausgibt.

Wenn ihr noch keine Schleifen behandelt habt, arbeite einfach mit mehreren System.out.println


Fragelisa168 
Beitragsersteller
 08.10.2020, 16:36

oki ich danke dir <3

0

Wie xxxcyberxxx bereits erklärt hat, entweder machst du es mit verschachtelten Schleifen (wenn ihr dies bereits gelernt habt).

int sternchen = 5;
for (int i = 0; i < sternchen; i++) {
    for (int j = 0; j < i + 1; j++) {
        System.out.print("*");
    }
    System.out.println();
}

Man kann es sich so vorstellen:

Ich will n Zeilen mit jeweils n Sternchen darin haben (1. Zeile 1 Sternchen, 2. Zeile 2 Sternchen etc). Die Variable n habe ich im Code zu sternchen umbenannt.

Ich kann aber nur ein Sternchen gleichzeitig schreiben, deswegen schreibe ich in jeder Zeile dieselbe Anzahl an Sternchen einzeln raus.

Das bedeutet im Code: Die erste for-Schleife wird so oft ausgeführt, wie du Zeilen mit Sternchen haben willst. Die zweite for-Schleife wird dann jeweils so oft ausgeführt, wie du gerade Zeilen hast.

Wenn dann die einzelnen Sternchen rausgeschrieben sind, will ich aber noch ein Leerzeile einfügen. Das mache ich mit einem leeren println() oder print("\n")

Info: j < i + 1

Das + 1 kommt daher, dass beim Programmieren meist von 0 weggezählt wird, siehe Initialisierung von i, wir aber nicht mit 0 Sternchen anfangen wollen sondern mit 1

Oder mit mehreren Ausgaben falls ihr Schleifen noch nicht gemacht habt.

System.out.println("*");
System.out.println("**");
System.out.println("***");
System.out.println("****");
System.out.println("*****");

Info: println() fügt am Ende des übergebenen Strings automatisch eine Leerzeile (Char code \n) ein. print() macht dies nicht, weshalb im Beispiel von Destranix die händisch eingefügt wurden

Wenn du das ganze umdrehen willst, musst du die Schleife so umstrukturieren, dass du rückwärts durchgehst.

int sternchen = 5;
for (int i = sternchen; i > 0; i--) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

Du fängst bei der Anzahl an Sternchen an und zählst pro Zeile eins runter, bis die Anzahl bei 0 angekommen ist.

Oder wieder ohne Schleifen:

System.out.println("*****");
System.out.println("****");
System.out.println("***");
System.out.println("**");
System.out.println("*");
Woher ich das weiß:eigene Erfahrung
public class Main{
    public static void main(String[] args){
        System.out.print("*\r\n**\r\n***\r\n****\r\n*****\r\n");
    }
}

Fragelisa168 
Beitragsersteller
 08.10.2020, 16:38

ich danke danke danke

0
alfredo153  08.10.2020, 16:47

Ganz schlechter Stil, die nichtportablen Zeilenumbrüche! Da sollten wir besser mit

System.out.printf("*%n**%n***%n****%n*****%n");

arbeiten, sonst gibt es Punktabzug für FS.

1
Destranix  08.10.2020, 16:54
@alfredo153

Naja, wie man's nimmt. '\n' oder "\r\n" dürften auf den gängigsten Allround-Betriebssytemen funktionieren. Außerdem sieht es schöner aus als das hässliche "%n" ;-)

0
ralphdieter  08.10.2020, 17:20
@alfredo153
nichtportablen Zeilenumbrüche

Das hast Du falsch verstanden: %n ist der systemspezifische Zeilentrenner. Nur \n ist portabel. Das wird bei der Ausgabe im Text-Modus automatisch angepasst.

1
alfredo153  08.10.2020, 17:27
@ralphdieter

Völlig richtig, danke für die Klarstellung. (Mein "Verbesserungsvorschlag" war allerdings nicht sonderlich ernstgemeint.)

2
ralphdieter  08.10.2020, 17:33
@alfredo153

Erst im Nachhinein sehe ich die (überflüssigen) "\r\n" in der Antwort. Jetzt verstehe ich auch, was Dich zu Deinem Kommentar bewegt hat.

0
Destranix  08.10.2020, 17:43
@ralphdieter

Irgendwo hatte es bei nur '\n' gejammert, weiß nicht mehr wo, ob das in Java war oder Python oder irgendwo anders. Deshalb mach ich ein "\r\n".

0