Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

Bitte stell den Code als Plaintext ein. Niemand mag Dateien aus unbekannten Quellen.

Der Editor im Forum bietet auch eine Code-Formatierung an. Danke.

Forum-Editor.JPG

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.

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

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

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.

 

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.