Entwickler-Ecke
Sonstiges (.NET) - Fragen zu Konsolenprojekt Fehlermeldung "nimmt 0-Argumente"
birdylicious - Di 11.03.14 17:58
Titel: Fragen zu Konsolenprojekt Fehlermeldung "nimmt 0-Argumente"
Hallo Zusammen,
hoffe ich bin hier im richtigen Forum, mit einer Frage zu meinem c# Konsolen Projekt Mastermind.
Ich bin noch ein Anfänger im Programmieren und habe ein Problem damit meine funktion "start()" aus einer anderen Klasse aufzurufen da sie keine Argumente annimmt (?)
Hier rufe ich die Funktion auf:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| static void Main(string[] args) { Master v1 = new Master(); WinMaster v2 = new WinMaster(); while (true) { v2.Menü(); int menüeingabe = Convert.ToInt32(Console.ReadLine()); switch (menüeingabe) { case 1: { v1.start(); break; } |
und so sieht die Funktion aus:
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:
| public void start(string templower, int schwarzerpin, int weißerpin) { int Versuche = 0; string[] Lösungsversuch; Console.Clear(); Console.SetCursorPosition(0, 0); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Gib deinen Versuch ein und bestätige mit Enter."); Console.WriteLine("Dein Versuch muss 5 Stellen sein"); Console.WriteLine("Es können nur folgende Farben enthalten sein:"); Console.WriteLine("''b'' für blue, ''g'' für green, ''y'' für yellow,"); Console.WriteLine("''c'' für cyan, ''r'' für red, ''m'' für magenta, "); Console.WriteLine("''w'' für white und ''d'' für darkgrey"); do { string Input = Console.ReadLine(); k2.eingabe(Input); if (templower == "0") { Console.WriteLine("Falsche Eingabe"); k2.eingabe(Input); } Lösungsversuch = new string[templower.Length]; for (int i = 0; i < templower.Length; i++) { Lösungsversuch[i] = Convert.ToString(templower[i]); }
getSchwarz(templower); if (schwarzerpin == 5) { Console.Clear(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Du hast gewonnen"); Console.WriteLine("Du hast es in {0} Versuchen geschafft", Versuche); if (Versuche <= 10) { Console.WriteLine("WOW, Sehr gut"); } else if (Versuche > 10 && Versuche <= 20) { Console.WriteLine("Nicht schlecht"); } Console.WriteLine("Da müssen wir noch dran arbeiten"); break; } getWeiss(templower); Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(Versuche, Versuche + 6); Console.Write("Versuch _ Deine Eingabe ___ Schwarze Stifte ___ Weiße Stifte "); Console.SetCursorPosition(Versuche + 2, Versuche + 7); Console.Write("{0}", Versuche); Console.SetCursorPosition(Versuche + 13, Versuche + 7); foreach (var farbe in Lösungsversuch) { Console.Write(farbe.ToString()); } Console.SetCursorPosition(Versuche + 33, Versuche + 7); Console.Write(schwarzerpin); Console.SetCursorPosition(Versuche + 53, Versuche + 7); Console.Write(weißerpin);
Versuche++; } while (Versuche < 30); { Console.Clear(); Console.SetCursorPosition(50, 50); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Du hast leider verloren"); } } |
Die Funktion Start gibt an 3 andere Funktionen Werte und bekommt dafür auch Werte wieder. Aber warum kommt nun die Fehlermeldung "Keine Überladung für die Methode 'start' nimmt 0-Argumente an."
Danke im Vorraus für die Hilfe.
Ralf Jansen - Di 11.03.14 18:13
In deine Main rufst du die Methode so auf
definiert ist die Methode aber so.
Zitat: |
C#-Quelltext 1:
| public void start(string templower, int schwarzerpin, int weißerpin) | |
Die 3 Parameter sind nicht optional sondern müssen übergeben werden.
Was du da konkret übergeben must erschließt sich mir nicht auf anhieb. Dazu sind im Code der Start Methode selbst noch zuviel Ungereimtheiten. Ich gehe aber mal davon aus das es nicht dein Code ist so wie du andeutest sondern fertiger Code den du korrigieren sollst im Rahmen einer Schulaufgabe?
birdylicious - Di 11.03.14 19:11
Hallo Ralf Jansen, danke für die schnelle Antwort.
Nein, das ist mein Code.
die 3 Parameter die in "public void start(string templower, int schwarzerpin, int weißerpin)" stehen sind dort, weil ich in der Funktion start(), 3 weitere Funktionen aufrufe (k2.eingabe(input) - der ich einen Input übergebe und dafür einen Input zurückbekomme (das ist der string templower) und getschwarz(templower) und getweiß(templower) denen ich templower übergebe und dafür die ints' schwarzerpin und weißerpin "returned" bekomme))
Jetzt ist natürlich die frage ob ich die Funktionen anders innerhalb dieser start() funktion aufrufen kann, damit keine 3 Parameter gegeben sind, die wie du sagst, übergeben werden müssen (was ich natürlich nicht möchte)
Ralf Jansen - Di 11.03.14 20:20
Zitat: |
der ich einen Input übergebe und dafür einen Input zurückbekomme (das ist der string templower |
Nein? In k2.eingabe geht was rein und nix raus. Und das was da rein geht hast du von der Console gelesen. Und das hat keinerlei Zusammenhang zu templower.
Zitat: |
getschwarz(templower) und getweiß(templower) denen ich templower übergebe und dafür die ints' schwarzerpin und weißerpin "returned" bekomme)) |
Dito. In die Methoden geht nur was rein. Raus kommt da gar nix.
Da du nirgendwo templower, schwarzerpin oder weißerpin im Code änderst ist der einzige Weg auf dem sie Werte bekommen könnten der das du die der Start Methode mitgibst.
Wenn die gar nicht übergeben werden sollen dann mach die zu lokalen Variablen und weise denen Werte zu. Nachdem was du beschreibst möchtest du offensichtlich das die Ausgaben von
k2.eingabe, getSchwarz, getWeiss in diesen 3 Variablen landen. Im Moment wird aber, wenn die 3 Methoden was zurückliefern, dieses ignoriert und die Rückgabe landet nirgendwo.
birdylicious - Di 11.03.14 20:36
C#-Quelltext
1: 2:
| string Input = Console.ReadLine(); k2.eingabe(Input); |
In der Funktion eingabe() die sich in der 2. Klasse befindet wird der Input string auf die gewünschte Länge überprüft und anschließend als string "templower" (da er in einen .toLower string unmgewandelt wird) zurückgegeben mit "return templower;" - Daher der Zusammenhang, ich habe mich mit dem "input zurückgegeben falsch ausgedrückt.
In der Parameter Liste erstelle ich den string templower aus dem "returned string templower;" aus der 2. Klasse um ihn in dieser Funktion start() weiter zu verwenden.
Anschließend übergebe ich den beiden Funktionen in der selben Klasse - getschwarz(templower) und getweiß(templower) diesen String um aus ihnen die beiden int "schwarzerpin" und "weißerpin" zu bekommen.
C#-Quelltext
1:
| public void start(string templower, int schwarzerpin, int weißerpin) |
Daher sind hier der string und die beiden int, weil ich diese aus den anderen Funktionen holen möchte. Ich kenne leider keinen anderen/besseren weg dies zu machen. Oder einen der passender für mein Programm wäre.
EDIT:
Danke für die Hilfe, auch wenn es nicht ganz den Projekt Anweisungen enspricht, habe ich die 3 funktionen jetzt in die start() funktion geholt und kann somit erstmal weiterarbeiten
Ralf Jansen - Di 11.03.14 21:26
Zitat: |
Daher sind hier der string und die beiden int |
Die Variablen heißen vielleicht gleich sind aber nicht das gleiche.
Wenn da was return wird weiße es lokal zu. Aka
Zitat: |
string templower; // nicht als Parameter sondern als lokale Variable in der Methode
templower = k2.eingabe(Input); |
Nochmal. Falls es in k2.Eingabe eine Variable gibt die auch templower heißt hat das nichts mit einer Variablen oder einem Methodenparameter zu tun der zufällig auch templower heißt.
Das gleiche gilt dann für die beiden anderen Variablen bzw. Parameter.
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!