Laden...

StackOverflowException bei sich selbst wiederholenden Methoden

Erstellt von sooks82 vor 12 Jahren Letzter Beitrag vor 12 Jahren 988 Views
Thema geschlossen
Hinweis von herbivore vor 12 Jahren

Bitte achte auf das richtige Forum. Mit "GUI: Windows Forms" hat das nicht das geringste zu tun ==> verschoben.

S
sooks82 Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren
StackOverflowException bei sich selbst wiederholenden Methoden

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

G
538 Beiträge seit 2008
vor 12 Jahren

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)

49.485 Beiträge seit 2005
vor 12 Jahren

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

Thema geschlossen