Autor |
Beitrag |
storestore
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 16:33
Hallo ich habe mal eine Frage: Ich habe ein code in einer Consolenanwendung sagen wir mal so:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string text= Console.ReadLine(); } string text2= Console.ReadLine(); if(text2=="test") { Main(); } |
Nur leider gibt es ein Problem beim Aufruf von Main(); Es gibt eine überladung und deswegen fehlen argummente. In meinem Lehrbuch wurde nicht beschrieben wie man eine Main Methode aufruft ;=)
mfg storestore
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 01.09.11 16:40
Mehrere Main-Funktionen sind nicht erlaubt.
Da dürftest du eine Fehlermeldung mit "has more than one entry point defined" bekommen.
Du brauchst doch eh nur eine Main (die Funktion die du da unten aufrufst kannst du doch anders nennen).
Für diesen Beitrag haben gedankt: storestore
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 01.09.11 16:41
Deine Main Methode hat Parameter (args) wenn du die manuell aufrufst solltest du also auch Parameter mitgeben sonst hält er das für eine andere Methode die auch zufällig Main heißt die es aber nicht gibt.
Main selbst aufzurufen hört sich nach hausgemachten Problemen an, insofern finde ich es gut das das nirgendwo erklärt wird. Lass das. Wenn du die dadurch enstehende Rekursion brauchst packe den Code doch einfach komplett in eine andere Methode rufe dort diese Methode rekursiv auf und rufe diese Methode halt von Main aus auf.
Edit: Ignoriert mich. Ich habe den Hinweis auf die Überladung übersehen. Auf was für Ideen Leute kommen 
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 16:49
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 16:51
Der siegercode ^^
Sorry für den dopplepsot muss aber sein sonst wird es zuviel
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: 55: 56: 57: 58: 59: 60: 61:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Methode(); } static void Methode() { Console.WriteLine("Hallo, geben sie bitte ihr aktuelles Guthaben ein!"); double geld = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string text = Console.ReadLine(); if (text == "D" || text=="d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A"||text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld+" Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); string nochmal = Console.ReadLine(); if(nochmal=="N"|| nochmal=="n")
{ Console.Clear(); Methode(); } } } } |
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 01.09.11 16:56
Hallo storestore,
nimm doch anstatt der Rekursion besser eine do...while-Schleife.
Und im Inneren kannst du dann deine Geldberechnung als eigene Methode(n) aufrufen.
Für diesen Beitrag haben gedankt: storestore
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 01.09.11 16:56
Ich würde vorschlagen das ganze iterativ und nicht rekursiv zu lösen.
Einfach eine do while-Schleife außen rum und schon kannst du dir die rekursion sparen
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 17:22
Aber wie soll hier die rekursierung eintretten wenn ich ihn doch direkt auf die Methode hinweise?
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
huuuuuh
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: Do 01.09.11 18:57
aber du bist eben noch in "Methode", wenn du "Methode" aufrufst. C# weiss nicht, ob noch Anweisungen nach dem Aufruf von der Methode kommen. Das, was du da machst, funktioniert nicht wie "goto" (welches du aber auch nicht verwenden solltest) und geht einfach nur zum Anfang, sondern ist eine echte Rekursion. Nimm am besten eine Schleife, wie hier bereits vorgeschlagen.
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 20:35
NEE, ich rufe die Methode in Main() auf und dann geht er automatische zu der Methode Methode()
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 01.09.11 21:02
storestore hat folgendes geschrieben : | NEE, ich rufe die Methode in Main() auf und dann geht er automatische zu der Methode Methode() |
Ja, und wenn der Benutzer N eingibt, wird Methode nochmal aufgerufen, darin vielleicht nochmal, und nochmal... Erst, wenn die Methode verlassen wird, ohne dass sie sich selbst aufruft, geht der Programmzeiger zum letzten Aufruf zurück, und beendet diesen Aufruf, und dann den vorherigen. Das nennt man Rekursion und wird schnell unübersichtlich, weil die Wiederholung nicht direkt sichtbar ist. Außerdem unterliegt sie einer Beschränkung in der Anzahl der Aufrufe (maximale Call-Stack-Größe), also wird der Benutzer nach einer gewissen Zahl von Durchläufen einen Fehler ernten.
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 21:15
Achso, ok jetzt habe ich es ausprobiert und entschieden. Ich mache es mal in eine Schleife. Ist es so wie ihr meint?
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: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) {
Methode(); } static void Abfrage() { if (Console.ReadLine() == "A") {
Console.WriteLine("Bitte nur zahlen eingeben!!!"); } }
static void Methode() { Console.WriteLine("Hallo, geben sie bitte ihr aktuelles Guthaben ein!");
double geld = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string text = Console.ReadLine(); if (text == "D" || text == "d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A" || text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben"); for (string wiederholen = Console.ReadLine(); wiederholen == "N" || wiederholen == "n"; ) { Console.Clear(); Methode(); Console.ReadLine(); } } }
} |
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Zuletzt bearbeitet von storestore am Do 01.09.11 21:21, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 01.09.11 21:20
Nein, die Schleifen sind nicht alle gleich. Und Du hast Dir genau die Schleife ausgesucht, die am wenigsten zu Deinem Problem passt.
Mach Dir doch erstmal die Anforderungen an die Schleife klar:
(1) Sie muss eine Abbruchbedingung haben
(2) Sie muss mindestens einmal durchlaufen werden
Welche Schleife passt da jetzt zu? Ein Tipp: Sie wurde nicht umsonst schon von zwei Leuten hier zur Sprache gebracht 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 21:22
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Zuletzt bearbeitet von storestore am Do 01.09.11 21:26, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 01.09.11 21:24
Passt die denn zu den Anforderungen?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 21:27
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Zuletzt bearbeitet von storestore am Do 01.09.11 21:34, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 01.09.11 21:32
//Edit: Du rufst immer noch Methode() auf, das macht keinen Sinn.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 21:36
Th69 hat folgendes geschrieben : | Hallo storestore,
nimm doch anstatt der Rekursion besser eine do...while-Schleife.
Und im Inneren kannst du dann deine Geldberechnung als eigene Methode(n) aufrufen. |
Ich habe das so verstanden das ich eine Schleife machen soll und darin die Methode aufrufen soll?!
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 01.09.11 21:40
Ich glaube, für Dich gilt echt die alte Informatiker-Regel: Nimm Dir mal ein Blatt Papier (keinen Editor, kein Tablet, ein wirkliches Blatt Papier!) und schreib Dir in einfachen Worten auf, was Deine Methode machen soll. Und dann (erst dann!) setzt Du es in Code um.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Für diesen Beitrag haben gedankt: Yogu
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 21:53
Christian S. hat folgendes geschrieben : | Ich glaube, für Dich gilt echt die alte Informatiker-Regel: Nimm Dir mal ein Blatt Papier (keinen Editor, kein Tablet, ein wirkliches Blatt Papier!) und schreib Dir in einfachen Worten auf, was Deine Methode machen soll. Und dann (erst dann!) setzt Du es in Code um. |
Ok, krass aber wieso?
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|