Bitte achte auf das richtige Forum. Mit "GUI: Windows Forms" hat das nicht das geringste zu tun ==> verschoben.
Hey,
habe als c# Übung ein kleines Konsolenprogramm geschrieben, das aus den Schriftzeichen "/|", "//|\", ... eine wählbare Anzahl von Bäumen mit einer wählbaren Höhe erstellt. Diese wurden dann problemlos durch 2 Schleifen erzeugt. Diese Schleifen öchte ich nun weglassen. Dafür habe ich jetzt 2 Methoden: Eine "Haupt-Mehtode", die die gleichen Zeichen nebeneinander erstellt und eine, die aufgerufen wird, wenn eine bestimmte Anzahl dieser Zeichen (also die vorher angegebene Anzahl der Bäume) erreicht ist. Diese setzt dann den Zähler der 1. Funktion zurück und lässt diese dann in der nächsten Zeile mit einer anderen zeichenfolge ("//|\" -> "///|\") weitermachen. Hat der zweite Zähler den Wert der angebenen Höhe erreicht, ruft er die erste Funktion nicht erneut auf und die Schleife sollte aufhören. Sollte. 😛
Hier mein Code:
static string drawtrees2(int number, int height) {
int anzahl = number;
int hoehe = height;
if (abstandset == false) {
for (int zaehler3 = 1; zaehler3 <= hoehe - 1; zaehler3++) {
abstand = abstand.Insert(1, " ");
}
fußabstand = abstand.Remove(abstand.Length -1);
abstandset = true;
}
if (zaehler11 <= anzahl) {
if (zaehler22 == 1) {
bäume += abstand + "*" + abstand + " " ;
zaehler11 += 1;
}
else if (zaehler11 != 1 && zaehler11 != hoehe + 2) {
bäume += abstand + links + mitte + rechts + abstand + " " ;
zaehler11 += 1;
}
else if (zaehler11 == hoehe + 2) {
bäume += fußabstand + "_|_" + fußabstand + " ";
zaehler11 += 1;
}
drawtrees2(anzahl, hoehe);
}
else if (zaehler22 <= hoehe +2) {
gonextline(anzahl, hoehe);
}
return bäume;
}
static string gonextline(int number, int height) {
int anzahl = number;
int hoehe = height;
bäume += "\n";
zaehler11 = 1;
if (zaehler22 != 2) {
links = links.Insert(links.Length - 1, "/");
rechts = rechts.Insert(rechts.Length - 1, "\\");
if (zaehler22 <= hoehe + 2) {
zaehler11 = 1;
drawtrees2(anzahl, hoehe);
}
}
if (abstand.Length >= 1) {
abstand = abstand.Remove(abstand.Length - 1, 1);
if (zaehler22 <= hoehe + 2) {
zaehler11 = 1;
drawtrees2(anzahl, hoehe);
}
}
return bäume;
}
Kriege leider nur eine StackOverFlowExcpetion... kann aber leider keine Endlosschleife sehen...
Danke schonmal
Meine Empfehlung:
Debugger Dranhängen und schauen, warum deine IF-Bedingung oder der Schleifen-Abbruch nicht tut, dadurch Fehlerquelle enschränken und weniger Code Posten ...
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo sooks82,
kann aber leider keine Endlosschleife sehen...
es handelt sich auch um eine Endlosrekursion, weil du drawtrees2, zwar hinter einer Bedingung, aber doch immer wieder mit denselben Parametern aufrufst. Ist aber wie schon von Grumbler85 gesagt, per Debugger leicht zu erkennen. Solche Fehler musst du selber lösen lernen.
herbivore