Veröffentlicht 5. Februar 20223 j Guten Tag, Habe folgendes problem, und zwar hab ich in einer Methode "Versuche" einen rundenzähler eingebaut der nach jedem falschen versuch -1 runterzählen soll und bei 0 das programm beendet, jedoch funktioniert dieser nicht und bräuchte nun hilfe. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { //Initialisierung //--- Login(); } static void Login() { Console.Write("Bitte geben sie ihren Benutzernamen ein: "); string imput2 = Console.ReadLine(); Console.WriteLine("Ihr benutzername lautet: " + imput2); Console.WriteLine("Geben sie nun ihr Passwort ein"); string imput = Console.ReadLine(); //Passwort setzen if (imput == "9977") { Console.WriteLine("Du hast das richtige Passwort eingeben!"); Console.ReadKey(); } if (imput != "9977") { Console.WriteLine($@"{imput} ist das falsche Passwort"); Versuche(); Console.ReadKey(); Login(); } } static void beenden() { Thread.Sleep(1000); Console.Clear(); Console.ReadKey(); Login(); } public static int Versuche() { int i = 3; string imput = "9977"; if (imput != "9977") { Console.WriteLine("Du hast noch " + i + " versuche"); i--; } if (i < 1) { Console.WriteLine("Du hast keine Versuche mehr übrig"); } return i; } } } Bearbeitet 5. Februar 20223 j von Zwonkoh
5. Februar 20223 j Bitte stell den Code als Plaintext ein. Niemand mag Dateien aus unbekannten Quellen. Der Editor im Forum bietet auch eine Code-Formatierung an. Danke.
5. Februar 20223 j Hallo Zwonkoh, deine Methode Versuche() definiert `i` und `imput` bei jedem Aufruf neu. Das heißt: Login -> Versuche -> Login -> Versuche -> Login -> Versuche Du müsstest hier mir Schleifen arbeiten um die Versuche abzubilden. Der Code innerhalb der Schleife müsste den Input jedes mal Anfragen, statt ihn zu definieren.
5. Februar 20223 j int i = 3; string imput = "9977"; if (imput != "9977") ... if (i < 1) ... -Jedes mal beim Aufrufen der Methode Versuche() ist i = 3 und imput="9977" festgelegt, warum dann überhaupt diese folgenden Abfragen ? -Die Methode Versuche() ist komplett überflüssig. Man kann den Code umschreiben und Login() mit einer Schleife durchlaufen, wobei Login() zurückgibt ob das Passwort richtig oder falsch war und weitere Schleifendurchläufe abbricht. Aber um minimal den Code zu ändern, kann man auch die AnzahlVersuche als eine globale Eigenschaft deines Programmes festlegen und die Versuche()-Methode fixen und dann sollte es funzen: class Program { static int AnzahlVersuche { get; set; } static void Main(string[] args) { AnzahlVersuche = 3; //Versuche auf 3 setzen. Login(); } ... static void Versuche() { if (AnzahlVersuche > 0) { Console.WriteLine("Du hast noch " + AnzahlVersuche + " versuche"); AnzahlVersuche--; } else { Console.WriteLine("Du hast keine Versuche mehr übrig"); } } Bearbeitet 5. Februar 20223 j von ihkaka fix
5. Februar 20223 j Autor vor 3 Stunden schrieb puscher: Hallo Zwonkoh, deine Methode Versuche() definiert `i` und `imput` bei jedem Aufruf neu. Das heißt: Login -> Versuche -> Login -> Versuche -> Login -> Versuche Du müsstest hier mir Schleifen arbeiten um die Versuche abzubilden. Der Code innerhalb der Schleife müsste den Input jedes mal Anfragen, statt ihn zu definieren. habe es mit for schleifen, if abfrage und while probiert aber es zählt die runden nicht runter, hättest du eine lösung?
5. Februar 20223 j Puh, wo soll man da anfangen? Im Grunde ist da so ziemlich alles nicht richtig. Ich würde dir mal raten, mit dem Debugger zu arbeiten und dir mal Schritt für Schritt anschauen, was du falsch machst. Du rufst z.B. die Versuche()-Methode ja immer wieder neu auf und da deine Variable i eine lokale Variable ist, wird sie nach jedem Verlassen und Versuche() aus dem Speicher gelöst und beim Eintreten neu gesetzt. Außerdem hast du auch eine Rekursion gebaut, da Login() sich selbst aufruft. Wenn man etliche Male das Passwort falsch eingibt führt dies unweigerlich zu einer StackOverflow Exception. Zusätzlich wird in der Versuche()-Methode deine Eingabe doch überhaupt nicht überprüft. Du gibst dort ein Input vor und dieser entspricht dem Passwort. Der Code wird also nie die Variable i runterzählen.
6. Februar 20223 j Zwonkoh du bist anscheinend ein absoluter Anfänger und hoffnungslos überfordert. Du hast hier die 2 Lösungen, die ich in der vorherigen Antwort angesprochen habe. Geht alles noch viel besser. Lese dir die Antworten von den Leuten hier genau durch, die werden dir helfen zu verstehen was du falsch machst und wie du alleine dein Code korrigieren (debuggen) kannst. consoleApp2.csconsoleApp2a.cs
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.