Wie programmiert man das (Java)?
Ich muss das für die Schule programmieren weiß aber nicht wie das geht
5 Antworten
Schnell zusammengedengelt:
public static void zeichneDreieck(int hoehe, boolean leer) {
// Falls hoehe = 1, dann gib nur ein Sternchen aus
if (hoehe == 1) {
System.out.println("*");
} else {
// Erste Zeile ausgeben
System.out.println(wiederholeZeichen('*', hoehe));
// weitere Zeilen bis zur vorletzten
for (int i = hoehe - 1; i>1; i--) {
// Leerzeichen vor der jeweiligen Zeile ausgeben
System.out.print(wiederholeZeichen(' ', hoehe - i));
// Je nachdem, ob leer oder nicht, unterschiedlich weitermachen
if (leer) {
// Stern, dann Leerzeichen, dann wieder Stern
System.out.print("*");
System.out.print(wiederholeZeichen(' ', i-2));
System.out.println("*");
} else {
// Nur Sterne
System.out.println(wiederholeZeichen('*', i));
}
}
// letztes Sternchen
System.out.print(wiederholeZeichen(' ', hoehe - 1));
System.out.println("*");
}
}
public static String wiederholeZeichen(char zeichen, int anzahl) {
String ergebnis = "";
for (int i = 0; i<anzahl; i++) {
ergebnis += zeichen;
}
return ergebnis;
}
Überlege dir erst, mit welchem Konstrukt du eine (abstrakte) Zeile zeichnen lassen kannst. Dabei gibt es ja immer nur die Unterscheidung: Leerzeichen oder Sternchen. Schreibe dir dazu eine Methode. Bedenke dabei: Du musst von außen festlegen können, wie viele Sternchen, etc. gezeichnet werden sollen.
Wenn du das hinbekommst, lässt du den Vorgang so oft wiederholen, wie es Zeilen gibt. Je Zeile wird sich die Konfiguration für deine erste Methode ändern.
Schreibe dir das alles zunächst als Pseudocode auf oder male dir ein Aktivitätsdiagramm.
Das ganze kannst du mit 2 for-Schleifen realisieren.
Ich hab dir hier mal eine Version geschrieben, die man zwar noch verkürzen kann, aber so mMn am verständlichsten ist.
if (leer){
for (int j = hoehe; j > 0; j--){
for(int x = 0; x < (hoehe-j); x++){
System.out.print(" ");
}
for (int i = 0; i < j; i++){
if (j == hoehe){
System.out.print("*");
}
else{
if(i==0|| i == j-1){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
}
System.out.println();
}
}
else{
for (int j = hoehe; j > 0; j--){
for(int x = 0; x < (hoehe-j); x++){
System.out.print(" ");
}
for (int i = 0; i < j; i++){
System.out.print("*");
}
System.out.println();
}
}
Du erstellst eine for-Schleife die bei der eingegebenen Zahl beginnt und bis auf 0 runter zählt. In dieser Schleife erstellst du eine weitere Schleife die die aktuelle Anzahl an Sternchen ausgibt. Nach der inneren Schleife machst du einen Zeilenumbruch.
for(int i = eingabe; i > 0; i--)
{
for(int u = 0; u < i; u++)
{
//Ausgabe Sternchen
}
//Zeilenumbruch
}
Bei den Leerzeichen musst du dir überlegen an welcher Stelle du ein Sternchen oder ein Leerzeichen ausgibst. Da musst du if-Abfragen in die Schleifen einbauen. Da kommst du aber sicherlich selbst drauf 😉
LG Knom
Hier dasselbe etwas kürzer:
static void zeichneDreieck(int hoehe, boolean leer)
{
for(int i = 1; i <= hoehe; ++i)
{
for(int j = 1; j <= hoehe; ++j)
System.out.print(j >= i
&& (!leer || i == 1 || j == i || j == hoehe) ? '*' : ' ');
System.out.println();
}
}
Zu der komplizierten Sternchen-Bedingung: Ein Sternchen soll immer dann ausgegeben werden, wenn j >= i ist (d.h. wir sind in der 2. "Hälfte" der Zeile) und gleichzeitig mindestens eine der folgenden Bedingungen erfüllt ist:
- leer == false (d.h. es ist ein volles Dreieck erwünscht)
- i == 1 (wir sind gerade in der 1. Zeile, die soll ja immer voll sein)
- j = i (wir sind gerade an der ersten Sternchenposition einer Zeile)
- j = hoehe (wir sind gerade an der letzten Sternchenposition einer Zeile)