Autor |
Beitrag |
0jeppa
      
Beiträge: 24
|
Verfasst: Do 22.10.09 18:19
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
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 } } |
Zuletzt bearbeitet von 0jeppa am Do 22.10.09 20:22, insgesamt 4-mal bearbeitet
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Do 22.10.09 19:06
Lies erstmal die Forumshilfe 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 
      
Beiträge: 24
|
Verfasst: Do 22.10.09 19:21
Danke für den Tip, jetzt weiss ich wenigstens auch mal wie das funktioniert.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 39
|
Verfasst: 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...
openbook.galileocomp...al_csharp_02_001.htm
Gruß Gabe
Edit: Link hinzugefügt
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
      
Beiträge: 39
|
Verfasst: Do 22.10.09 21:05
Die runden Klammern auch nicht vergessen... 
|
|
0jeppa 
      
Beiträge: 24
|
Verfasst: Do 22.10.09 21:09
Bin euren Tips gefolgt und habe noch einmal etwas daran rumgebastelt. Was meint ihr?
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
      
Beiträge: 39
|
Verfasst: 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 
      
Beiträge: 24
|
Verfasst: 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
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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
      
Beiträge: 39
|
Verfasst: Do 22.10.09 22:03
Soviele Klammern wie du öffnest musst du auch wieder schließen...
|
|
0jeppa 
      
Beiträge: 24
|
Verfasst: 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
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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
|
|