Autor Beitrag
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 16:33 
Hallo ich habe mal eine Frage: Ich habe ein code in einer Consolenanwendung sagen wir mal so:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 :shock:

Für diesen Beitrag haben gedankt: storestore
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 16:49 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
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 :shock:

Gut dann rede ich jetzt mit mir selbst und ignoriere dich ;)
Ich werde es einfach in eine andere Methode packen, danke;)

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 16:51 
Der siegercode ^^
Sorry für den dopplepsot muss aber sein sonst wird es zuviel
ausblenden volle Höhe 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:
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()
        {
            // Abfrage
          Console.WriteLine("Hallo, geben sie bitte ihr aktuelles Guthaben ein!");
           
            // Die Variable
            double geld = Convert.ToDouble(Console.ReadLine());
           // Abfrage2
            Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?");
            Console.WriteLine("D= draufzahlen, A=Abziehen!");
            string text = Console.ReadLine();
            if (text == "D" || text=="d")
            {   // Was soll er machen
                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();
            }
                // Was wenn es nicht stimmt
            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
                // Else again .,.
            {
                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();
            // Nochmal mit Main();???
            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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 01.09.11 21:02 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: 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?
ausblenden volle Höhe 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:
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()
        {
            // Abfrage
            Console.WriteLine("Hallo, geben sie bitte ihr aktuelles Guthaben ein!");





            // Die Variable
            double geld = Convert.ToDouble(Console.ReadLine());
            // Abfrage2
            Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?");
            Console.WriteLine("D= draufzahlen, A=Abziehen!");
            string text = Console.ReadLine();
            if (text == "D" || text == "d")
            {   // Was soll er machen
                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();
            }
            // Was wenn es nicht stimmt
            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
            // Else again .,.
            {
                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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 01.09.11 21:20 
:autsch:
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 :roll:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: storestore
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 21:22 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
:autsch:
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 :roll:

Do-while? ;)
Habt ihr es euch so vorgestellt?? Oder soll ich das mit der Methode Methode() ganz weglassen?
ausblenden volle Höhe 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:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
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()
        {
            // Abfrage
            Console.WriteLine("Hallo, geben sie bitte ihr aktuelles Guthaben ein!");





            // Die Variable
            double geld = Convert.ToDouble(Console.ReadLine());
            // Abfrage2
            Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?");
            Console.WriteLine("D= draufzahlen, A=Abziehen!");
            string text = Console.ReadLine();
            if (text == "D" || text == "d")
            {   // Was soll er machen
                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();
            }
            // Was wenn es nicht stimmt
            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
            // Else again .,.
            {
                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");
            string wiederholen = Console.ReadLine();
            do 
            {
                Console.Clear();
                Methode();
                Console.ReadLine();
            } while(wiederholen== "N"|| wiederholen=="n");
        }
    }

}

_________________
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 21:27 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Passt die denn zu den Anforderungen?

Ja sie Passt: Sie durchläuft das erstemal und dann checkt sie erst ob es stimmt oder nicht(abbruchbedingung) ;)
Ok,danke für die antworten leute ;)

_________________
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 01.09.11 21:32 
:zustimm:

//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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 21:36 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 21:53 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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"