Java: Wie erstelle ich folgendes Muster im Anhang?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
  1. bitte nutz für deinen Quellcode auch den Code-Tag. Dadurch wird das viel besser lesbar, da die Einrückungen vorhanden bleiben
  2. wenn du einfach nur ne kurze Lösung willst, schau dir den unteren Teil meiner Antwort an.

Sonst, wenn du selbst drauf kommen willst, ein bisschen zum überlegen:

  • Rein theoretisch brauchst du nur zwei For-Schleifen.
  • Eine (bei mir unten im Code j) davon läuft von oben nach unten und gibt die Zahl an, die gedruckt werden soll
  • die andere (i) läuft von links nach rechts und sucht aus, ob das aktuelle Zeichen . oder die Zahl sein soll
  • Es ist hilfreich, den "Index" des mittleren Zeichens ODER die Länge der gesamten Zeile zu berechnen. Abhängig vom abstand des momentanen Zeichens zum mittleren Zeichen kannst du entscheiden, ob nun die Zahl oder der Punkt gezeigt wird
  • Dazu musst du am Ende schauen, was ab der mittleren Zeile passieren soll: Es soll ja wieder weniger Zahl, dafür mehr Punkt angezeigt werden. Da ändert sich die Bedinung

public class Extra {
    public static void main(String args[]) {
        for (int i = 1; i < 6; i++) {
            diamond(i);
            System.out.println();
        }
    }
    
    public static int abs(int a, int b) {
        return a - b < 0 ? b - a : a - b;
    }
    
    public static void diamond(int middleElement){
        if (middleElement > 5) return;
        int len = middleElement * 2 - 1;
        for(int j = 1; j <= len; j++) {
            for (int i = 0; i < len; i++)
                System.out.print(abs(len/2, i) < ((j <= len/2+1) ? j : len-j+1) ? j : ".");
            System.out.println();
        }
    }
}

xxxcyberxxx  03.10.2019, 22:53

alternativ eine einfacherere Möglichkeit, die einfach nur mitzählt, dafür aber mehr Schleifen braucht:

public static void diamond2(int middleElement) {
    int cnt = 1;
    int len = middleElement * 2 - 1;
    for(int j = 1; j <= len; j++) {
        int dotCount = (len - cnt) / 2;
        for (int i = 0; i < dotCount; i++)
            System.out.print(".");
        for (int i = 0; i < cnt; i++)
            System.out.print(j);
        for (int i = 0; i < dotCount; i++)
            System.out.print(".");
        System.out.println();
        if (j < len/2 + 1)
            cnt += 2;
        else
            cnt -= 2;
    }
}

So in c#:

      for (int i = 1; i < 10; i++)
      {
        char zahl = i.ToString().ToCharArray()[0];
        int a = 5-Math.Abs(5 - i);
        int b = Math.Abs(2 * a - 1);
        int c = 5-a;
        string t1 = new String(zahl,b);
        string t2 = new String('.', c);
        Console.WriteLine(t2 + t1 + t2);
      }
Woher ich das weiß:Berufserfahrung – Studium der Informatik + Softwareentwickler seit 25 Jahren.