Pyramide aus * erstellen

Die Aufgabe lautet:

public class Pyramide {

/*
* Diese Methode soll eine Pyramide aus * zurueckgeben.
* Dabei wird mit n die breite der untersten Reihe angegeben.
* Als n wird immer eine ungerade Zahl angegeben.
* Eine Pyramide sieht wie folgt aus:
* *
* ***
* ***** (hier bekomme ich die zeilen schon beim Kopieren nicht eingerückt xD)
* Diese wird so erstellt, dass in der obersten Zeile 1 * ist, in der darunterliegenden 3 *,...
* in der (n/2+1)ten Zeile (die unterste Zeile) kommmen n *.
* Vor dem ersten * in jeder Zeile muessen noch Leerzeichen eingesetzt werden,
* damit die Sterne jeder Zeile in der Mitte stehen. Nach dem letzten Stern in
* jeder Zeile kommt ein Zeilenumbruch, dann beginnt die n�chste Zeile.
* Nach der letzten Zeile folgt KEIN Zeilenumbruch mehr.
* Das Zeichen Zeilenumbruch ist das Folgende: \n
*/


Mein Programmieransatz sah bis jetzt so aus :


Java:
public static String machePyramide(int n) {

  String a="";

  for (int i=1 ; i<n; i+=2) {

 
   for(int j=0;j<i; j++) {
    a=a+"*";
   }
 
  }


 
  return a;
   }
Jedoch kommt beim Kompilieren immer das raus und ich weiß einfach nicht, wie ich das Program gestallten soll, damit es die Zeilen einrückt.
Ich hab schon so gut wie alles versucht.. Ich bitte um HILFE :)

Ausgabe auf der Console:

*
****
*********
 
Zuletzt bearbeitet von einem Moderator:
Ich hab schon so gut wie alles versucht.. Ich bitte um HILFE :)
Java:
public static String pyramid(int n) {
        if (n < 1) // keine Stein
            return "";
        if (n == 1) // ein Stein;
            return "*";
        int numSpace = n / 2 - 1; // Anzahl Leersteine

        String stone = ((n % 2 == 0) ? "**" : "*"); // gerade Zahl -> Doppelspitze
        String space = getFilledString(' ', numSpace);
        String tmp = space + stone;
        for (int i = 0; i < numSpace; i++) {
            tmp += "\n"; // Zeilenumbruch
            space = space.substring(0, space.length() - 1); // reduziere Leersteine
            stone += "**"; // erhoehe Steine
            tmp += space + stone; // erweitere Rueckgabestring
        }
        return tmp;
    }

    public static String getFilledString(char c, int len) {
        StringBuffer tmp = new StringBuffer("");
        for (int i = 0; i < len; i++)
            tmp.append(c);
        return tmp.toString();
    }
 
Java:
public static String pyramid(int n) {
  String res = "";
  // Für alle Zeilen:
  for (int y = 0; y <= n / 2; y++) {
    // Leerzeichen vor jeder Zeile:
    for (int i = 0; i < n / 2 - y; i++)
      res += " ";
    // Sterne in jeder Zeile:
    for (int x = 0; x <= y * 2; x++)
      res += "*";
    // KEIN Zeilenumbruch nach der letzten Zeile!
    if (y < n / 2)
      res += "\n";
  }
  return res;
}
EDIT: Wenn Java 11 erlaubt ist, dann wie @mrBrown unten sagte, mit String.repeat(int) und zusätzlich ein bisschen Bitshifting-Obfuskierung :)
Java:
public static String pyramid(int n) {
  String res = "";
  for (int y = 0; y <= n >> 1; y++) {
    res += " ".repeat((n >> 1) - y);
    res += "*".repeat((y << 1) + 1);
    if (y < n >> 1)
      res += "\n";
  }
  return res;
}
 
Zuletzt bearbeitet:
Hier noch schnell die Stream Lösung
Java:
int n = IntStream.of(4).map(e -> 2 * e).findFirst().getAsInt();
IntStream.iterate(0, i -> i + 1).limit(n).forEach(a -> {
  IntStream.iterate(0, i -> i + 1).limit(n - a - 1).forEach(b -> System.out.print(" "));
  IntStream.iterate(0, i -> i + 1).limit(a * 2 + 1).forEach(c -> System.out.print("*"));
  System.out.println();
});
 
Dann will ich auch mal zur Verwirrung beitragen:
Java:
    public static String machePyramide(int n) {
        int w = 2*n-1;
        StringBuilder b = new StringBuilder();
        for (int i = 0; i < w*n; i++) {
            b.append(i > 0 && i % w == 0 ? '\n' : "")
             .append(Math.abs(i % w - n + 1) > i / w ? ' ' : '*');
        }
        return b.toString();
    }
 
Ok, die Lösung ist echt heftig, das schaue ich mir dann mal in ruhe gleich an :D
Bei meiner vorherigen Lösungsvariante eine Korrektur: Bei geradem n -> Doppelte Spitze, hatte aber die Leerzeichen nicht reduziert.
Die Funktion getFilledString(), kann durch String.repeat(int) ersetzt werden. Wie @mrBrown bereits erwähnt hat.
Geht leider erst ab Java 11. Ich verwende aus Kompatibilitätsgründen aber Java 8.

Java:
public static String pyramid(int n) {
        if (n < 1) // keine Stein
            return "";
        if (n == 1) // ein Stein;
            return "*";
        int numSpace = n / 2; // Anzahl Leersteine ungerade Zahl
        String stone = "*";
        if ((n % 2 == 0)) { // gerade Zahl -> Doppelspitze
            stone += "*";
            numSpace -= 1;
        }
        String space = getFilledString(' ', numSpace);
        String tmp = space + stone;
        for (int i = 0; i < numSpace; i++) {
            tmp += "\n"; // Zeilenumbruch
            space = space.substring(0, space.length() - 1); // reduziere Leersteine
            stone += "**"; // erhoehe Steine
            tmp += space + stone; // erweitere Rueckgabestring
        }
        return tmp;
    }

    public static String getFilledString(char c, int len) {
        StringBuffer tmp = new StringBuffer("");
        for (int i = 0; i < len; i++)
            tmp.append(c);
        return tmp.toString();
    }
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben