C# Basics, wie drehe ich die Dreieck Funktion um?
public class Triangles
{
/// <summary>
/// This task is similar to the triangle task, this time you have to create a shape of two triangles.
///
/// Example:
/// The shape with a height of 5 will look like this
///
/// 12345
/// 1234
/// 123
/// 12
/// 1
/// 12
/// 123
/// 1234
/// 12345
///
/// </summary>
public static string Create(int height)
{
string ausg = ""; //ist für die ausgabe für den tester zuständig
int i, j, k;
for (i = 0; i < height; i++) // Die äußere Schleife iteriert durch die Zeilen
{
for (j = 0; j < height -i; j++) // Die erste innere Schleife fügt Leerzeichen hinzu
{
ausg += "";
}
for (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;
Die schleife sieht jetzt so aus
1
12
123
1234
die soll aber dann
123456789
12345678
1234567
aussehen
kann mir jemand helfen?
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!
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();
}
}