Wie programmiert man das (Java)?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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();
  }
}
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker

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

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

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)