Dr Java Muster ausgeben wie?
Hey Leute ich bin bei der ersten Woche meines Studiums und heute hatten wir das erste mal Programmieren in dem Übungskur. Ich bin ein Anfänger und daher komme ich mit einigen Sachen nicht mit. Wir benutzen "Dr Java" und sollten ein Programm schreiben, welches 3+4 rechnet und das Ergebnis 7 zeigt. Dies ist mir gelungen, jedoch sollen nun Muster folgen mit * Sternchen - könnte mir jemand helfen? Und mir eventuell Tipps geben wie und wo ich am besten lernen kann? Dankiii im Vorraus
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
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("*");
public class Main{
public static void main(String[] args){
System.out.print("*\r\n**\r\n***\r\n****\r\n*****\r\n");
}
}
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" ;-)
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.
Völlig richtig, danke für die Klarstellung. (Mein "Verbesserungsvorschlag" war allerdings nicht sonderlich ernstgemeint.)
Erst im Nachhinein sehe ich die (überflüssigen) "\r\n" in der Antwort. Jetzt verstehe ich auch, was Dich zu Deinem Kommentar bewegt hat.
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".
Ganz schlechter Stil, die nichtportablen Zeilenumbrüche! Da sollten wir besser mit
arbeiten, sonst gibt es Punktabzug für FS.