Entwickler-Ecke
C# - Die Sprache - Fehlersuche in Methode
0jeppa - Do 22.10.09 18:19
Titel: Fehlersuche in Methode
Hallo Zusammen
ich habe von meinem Lehrer diese Methode bekommen und soll nun nach Fehlern suchen. Leider weiss ich noch nicht einmal was diese Methode überhaupt für einen Zweck hat. Vielleicht kann mir jemand von euch sagen, wie diese Methode funktionieren soll und wo Fehler versteckt sind. Wäre euch sehr dankbar.
Gruss Thomas
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| static void Main(string[] args) { private int syntaxFehler(int StartZahl, int Endzahl, int max); max = int.MinValue; min = int.MaxValue; } for(int i = StartZahl; i <= Endzahl; i++) { int zahl = i; int zähler = 0; while (zahl != 1) { if (zahl % 2 = 0) zahl /=2; else zahl = (3 * zahl + 1) / 2; zähler++; } if min < zähler { min = zähler; } if (max > zähler) { max = zähler; }
return min } } |
JüTho - Do 22.10.09 19:06
Lies erstmal die
Forumshilfe [
http://www.c-sharp-forum.de/help_schreiben_bbcodes_source.html&sub=,19,27,32] durch, wie Beiträge geschrieben werden sollen. Bei deiner ersten Diskussion ist dir immer ein Moderator hinterhergerannt und hat deine Codeauszüge formatiert. Mach das erst mal selber (dafür gibt es den Schere-Button); danach bin ich bereit, deinen Code durchzulesen. Jürgen
PS. Ich hoffe, dass alle anderen potenziellen Helfer ebenfalls warten und nicht voreilig helfen.
0jeppa - Do 22.10.09 19:21
Danke für den Tip, jetzt weiss ich wenigstens auch mal wie das funktioniert.
JüTho - Do 22.10.09 20:02
Na, das ist doch schon etwas. Nun bearbeite den Beitrag bitte nochmals und setze Einrückungen und Klammern {} so, dass alles, was zusammengehört, auch zusammenhängend eingerückt ist. Danke! Jürgen
0jeppa - Do 22.10.09 20:22
Ich habe die Anordnung noch einmal etwas angepasst. Das Problem ist, das die Klammer vermutlich auch noch an der falschen Stelle stehen, da sie ein Teil der Fehlersuche sind.
Gruss Thomas
Gabe - Do 22.10.09 20:28
Also ich würde mir erst mal diese geschweiften Klammern anschauen...
VS formatiert die automatisch richtig, wenn du die letzte Klammer entfernst und nochmal setzt. Wenn das nicht klappt, stimmen deine Klammern nicht...
Also erst mal die richtig setzen.
In diesem Kapitel findest du alles für dein Problem...
http://openbook.galileocomputing.de/visual_csharp/visual_csharp_02_001.htm
Gruß Gabe
Edit: Link hinzugefügt
JüTho - Do 22.10.09 20:52
Gabe hat folgendes geschrieben : |
Also ich würde mir erst mal diese geschweiften Klammern anschauen... |
In der Tat, damit geht es los.
Gabe hat folgendes geschrieben : |
Also erst mal die richtig setzen. |
Danach Semikolons prüfen.
Was die Methode soll, ist vermutlich eher zweitrangig. Vielleicht kann man es am Ende erkennen. Aber klar ist zunächst: Es gibt nur die Main-Methode. Aufruf und Verwendung von syntaxFehler() gehören vermutlich mit zur Aufgabenstellung; denn es geht nur um die Fehlersuche.
Gruß Jürgen
Gabe - Do 22.10.09 21:05
Die runden Klammern auch nicht vergessen... ;-)
0jeppa - Do 22.10.09 21:09
Bin euren Tips gefolgt und habe noch einmal etwas daran rumgebastelt. Was meint ihr?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| static void Main(string[] args); public static void syntaxFehler(int StartZahl, int Endzahl, int max); int max = Int32.MinValue; int min = Int32.MaxValue; int Startzahl; int Endzahl; for (int i = StartZahl; i <= Endzahl; i++) { int zahl = i; int zähler = 0; } while (zahl != 1) if (zahl % 2 = 0) { zahl /=2; } else { zahl = (3 * zahl + 1) / 2; zähler++; } if (min < zähler) { min = zähler; } if (max > zähler) { max = zähler; } return min } |
Gabe - Do 22.10.09 21:16
0jeppa hat folgendes geschrieben : |
Was meint ihr?
|
Wenn ich das so schnell übersehe, hast du Startzahl und Endzahl zusätzlich noch einmal deklariert. Die bekommst du aber schon mit der Funktion übergeben. Kannst also wieder streichen.
Zudem hast du es noch falsch geschrieben, so funktioniert es dann eh nicht. C# unterscheidet zwischen Groß- und Kleinschreibung!
Versuch mal nicht, nach der Funktion zu schauen, sonder nur nach der Syntax. Funktion ist glaub ich eh unwichtig oder?
Die geschweiften Klammern passen immer noch nicht.
0jeppa - Do 22.10.09 21:27
Habe die Klammern geändert. Fehler der Klammern werden jetzt keine mehr angezeigt. Nur noch ein Fehler token und einer Member
Das war ein hartes Stück Arbeit
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| namespace SchweizerKreuz { class Program {
static void Main(string[] args); public static void syntaxFehler(int StartZahl, int Endzahl, int max); { int max = Int32.MinValue; int min = Int32.MaxValue; } for (int i = StartZahl; i <= Endzahl; i++) { int zahl = i; int zähler = 0; while (zahl != 1)
if (zahl % 2 = 0) { zahl /=2;
} else zahl = (3 * zahl + 1) / 2; zähler++; } if (min < zähler) { min = zähler; } if (max > zähler) { max = zähler; }
return min
} |
JüTho - Do 22.10.09 21:53
0jeppa hat folgendes geschrieben : |
Man, die geschweiften Klammern machen mich echt fertig. Mir raucht schon die Birne. Kann man die nicht automatisch setzen lassen? |
Ja, vor allem wenn man anfängt, den Code selbst zu schreiben. Einen anderen Vorschlag hat Gabe vorhin schon gebracht:
Zitat: |
VS formatiert die automatisch richtig, wenn du die letzte Klammer entfernst und nochmal setzt. Wenn das nicht klappt, stimmen deine Klammern nicht... |
Aber das, was du gemacht hast, nennt man Verschlimmbesserung. Schau zunächst mal, wie eine Methode aussehen muss, z.B. im OpenBook Kap.2.2.5 (siehe Beitrag von Gabe). Dort ist das Muster der Main-Methode; alles andere gehört dort hinein.
Bitte erläutere hier einmal, wie eine Methode strukturiert sein muss (und vergleiche das mit der aktuellen Version von Main); dann sehen wir, ob du das wenigstens verstanden hast. Jürgen
PS. Bitte korrigiere die
Einrückungen; dann kannst auch du falsche Klammern leichter erkennen. Und jeweils eine Leerzeile genügt vollkommen; mehr ist überflüssig.
PS 2. So wie der Code ursprünglich aufgebaut ist, kannst du kein korrektes Programm daraus machen. Es kann nur darum gehen, Fehler festzustellen; die musst du vor allem begründen statt zu beseitigen.
Gabe - Do 22.10.09 22:03
Soviele Klammern wie du öffnest musst du auch wieder schließen...
0jeppa - Fr 23.10.09 22:25
Hallo, habe es nochmals überarbeitet. Denke das die Klammern nun stimmen. Seht ihr noch Fehler in der Anweisung? Gruss Thomas
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| { class Program {
static void Main(string[] args); public static void syntaxFehler(int StartZahl, int Endzahl, int max); int max = Int32.MinValue; int min = Int32.MaxValue; for (int i = StartZahl; i <= Endzahl; i++) { int zahl = i; int zähler = 0; } while (zahl != 1)
if (zahl % 2 = 0) { zahl /=2; } else { zahl = (3 * zahl + 1) / 2; zähler++; } if (min < zähler) { min = zähler; } if (max > zähler) { max = zähler; } return min} |
JüTho - Sa 24.10.09 10:35
Ich sehe jetzt vor allem zwei Fehler: Es sind zwei Methoden deklariert worden mit Namen und Argumenten, aber keinerlei Methodenrumpf dazu. Außerdem gibt es eine Menge Anweisungen innerhalb einer Klasse, die dort nichts, aber auch gar nichts zu suchen haben. Und die Einrückungen (z.B. if hinter while) sind nach wie vor eine Katastrophe und machen alles völlig unverständlich.
Wie schon gesagt: Verschlimmbesserung.
Ich habe mit meinem letzten PS2 bereits angedeutet, wie hier die Fehlersuche laufen müsste. Gehe am besten zurück auf Anfang, korrigiere zuerst die Einrückungen und fang dann mit weiterer Fehlersuche an.
Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!