Zum Inhalt springen
  • 0

C# Rundenzähler in Methode


 Teilen

Frage

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 von Zwonkoh
Link zu diesem Kommentar
Auf anderen Seiten teilen

6 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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 von ihkaka
fix
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Meinung

Schreibe jetzt und erstelle anschließend ein Benutzerkonto. Wenn Du ein Benutzerkonto hast, melde Dich bitte an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

Fachinformatiker.de, 2021 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung