C# Basics, wie drehe ich die Dreieck Funktion um?

1 Antwort

Naja, Deine Methode Fügt die Zahlen nur ansteigend hinzu. Wenn Du Absteigende benötigst, musst Du erstmal die Schleif absteigen lassen:

using System;
class Prog{
    public static string Create(int height)
    {
        string ausg = "";   //ist für die ausgabe für den tester zuständig
        for (int i = height; i >1 ; i--)        // Die äußere Schleife iteriert durch die Zeilen
        {
            for (int j = height -i; j >0 ; j--)       // Die erste innere Schleife fügt Vorn Leerzeichen hinzu
            {
                ausg += " ";
            }
            for (int k = 1; k <= i; k++)        // Die zweite innere Schleife fügt Zahlen hinzu
            {
                ausg += k;
            }
            ausg = ausg + "\n";      // Zeilenumbruch am Ende jeder Zeile
        }
        /**/
        for (int i = 0; i < height; i++)        // Die äußere Schleife iteriert durch die Zeilen
        {
            for (int j = 1; j < height -i; j++)       // Die erste innere Schleife  fügt Vorn Leerzeichen hinzu
            {
                ausg += " ";
            }
            for (int k = 1; k <= i+1; k++)        // Die zweite innere Schleife fügt Zahlen hinzu
            {
                ausg += k;
            }
            ausg = ausg + "\n";      // Zeilenumbruch am Ende jeder Zeile
        }
    return ausg;
}
    public static void Main(string[] args){
        Console.WriteLine(Create(8));
        Console.ReadKey();
    }
}

Ich persönlich hätte die Sache mit 2 Listen gelöst:

using System;
using System.Collections.Generic;


class Prog{
    public static string CreateNice(int count)
    {
        Console.WriteLine("CreateNice-Methode");
        string NumString = "";
        var NumberList = new List<string>();
        var ReverseList = new List<string>();
        for (int i =1 ; i <= count ; i++){
            NumString += i;
            Console.WriteLine("füge \"{0}\" zu den Listen",NumString); 
            NumberList.Add(NumString); //die Nummer anhängen
            ReverseList.Insert(0, NumString); //die Nummer vorn anfügen
        }    // jetzt haben wir 2 hübsche Listen mit ZahlenStrings
        ReverseList.Remove("1"); //bei eienm  von beiden Listen den Wert 1 entfernen damit die nicht Doppelt ist
        NumberList.InsertRange(0,ReverseList); //die Reverselist an den Anfang der NumList einfügen 
        return String.Join("\n",NumberList); //liste in einen string mit Zeilenvorschünen  umwandeln
    }


    public static void Main(string[] args){
        Console.WriteLine(CreateNice(30));
        Console.ReadKey();
    }
}

Auf das auffüllen der Strings mit Leerzeichen damit diese rechtsbündig dargestellt werden, geh ich erstmal nicht weiter ein. Auch dafür gibts eine fertige Methode

Das Aufüllen mit Leerzeichen funktioniert bei deiner Methode auch nur bei einstelligen Zahlen!




Erzesel  18.08.2023, 21:41

Ich hatte etwas Langeweile....

Das Ganze Rechtsbündig:

using System;
using System.Collections.Generic;
class Prog{
    public static string CreateRightPadded(int count)
    {
        string NumString = "";
        var NumberList = new List<string>();
        var ReverseList = new List<string>();
        for (int i =1 ; i <= count ; i++){
            NumString += i;
            NumberList.Add(NumString);
            ReverseList.Insert(0, NumString);
        }
        ReverseList.Remove("1");
        NumberList.InsertRange(0,ReverseList);
          // Rechtsbündig:
          //da wir erst nach Abschluss der Schleife die maximale Länge des Zahlenstrings (NumString) kennen,
          //können wir alle Strings in unserer Liste erst jetz mit führenden Leerzeichen auffüllen.
          //im Sinne  der Verständlichkeit verwende ich nicht die Linqlösung und iteriere klassisch mit foreach über die Liste  
        int MaxPadding = NumString.Length; //der hat seine endgüldige Länge erreicht!
        char PaddingChar=' '; //Zeichen mit dem links aufgefüllt wird
        int currendListElement = 0;
        foreach (var Number in (new List<string>(NumberList))) { //wir füttern den Loop aus einer Kopie ,weil wir nicht glechzeitig in der selben Liste lesen und schreiben können!
            NumberList[currendListElement++] = Number.PadLeft(MaxPadding, PaddingChar);
        }
        return String.Join("\n",NumberList); //liste in einen string mit Zeilenvorschünen  umwandeln
    }
    public static void Main(string[] args){
        Console.WriteLine(CreateRightPadded(12));
        Console.ReadKey();
    }
}
0