Wieso erkennt Visual Studio 2019 die Globale Variable nicht

K

kcinay055679

Gast
Vs 2019 erkennt die globale Variable nicht.
Was muss ich ändern um keine Fehlermeldung zu erhalten?
Mein Code:


C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kcinay_environment
{
    
    class Hauptklasse
    {
        public static int Min = 0;
        public static int Sek = 0;




        public static void Main(string[] args)
        {
            
        String Hauptpasswort = "4K244Hz";
            String Eingabe;
            int löschcounter = 0;
            Random rnd = new Random();
            int Zahl = rnd.Next(0, 1000);
            bool abfrage = false;
            int Min = 0;
            int Sek = 0;



            while (true)
            {
                Console.WriteLine("Bitte inizialisiere das Hauptpasswort");
                String Hauptpasswort_Eingabe = Console.ReadLine();
                if (Hauptpasswort_Eingabe == Hauptpasswort)
                {
                    abfrage = true;
                } //check Hauptpasswort

                if (abfrage == false)
                {
                    Console.Clear();

                    Console.WriteLine(Hauptpasswort_Eingabe + " war das falsche Passwort");
                    Task.Delay(5000).Wait();
                    Console.Clear();


                } // Hauptpaswort Richtig

                if (abfrage == true)
                {
                    Console.WriteLine("Dies ist ein Zahlenerratungs Spiel");
                    Console.WriteLine("Das Spiel beinhaltet eine Zahlenspanne von 0 - 1000");
                    Console.WriteLine("Tippe eine Zahl und das Program sagt dir ob die Gesuchte Zahl kleiner oder Grösser ist als die Eingegebene.");
                    Console.WriteLine("   ");
                    while (true)
                    {
                        Console.WriteLine("Tippe eine Zahl: ");
                        Eingabe = Console.ReadLine();

                        if (Eingabe == "Lösung")
                        {
                            Console.WriteLine("Die Lösung war: {0}", Zahl);
                            Console.WriteLine("   ");
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + "Sekunden gebraucht um die Richtige Zahl zu finden :-)");
                            Console.ReadKey();
                            break;
                        }

                        int Ausgabe = Convert.ToInt32(Eingabe);

                        if (Zahl == Ausgabe)
                        {
                            Console.WriteLine("Du hast die Richtige Zahl gefunden");
                            Console.WriteLine("Es war die Zahl {0} ", Zahl);
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + " Sekunden gebraucht um die Richtige Zahl zu finden :-)");
                            Console.ReadKey();
                            Console.Clear();
                            break;
                        }

                        if (Ausgabe > Zahl)
                        {
                            löschcounter += 1;
                            if (löschcounter == 5)
                            {
                                löschcounter = 0;
                                Console.Clear();
                                Console.WriteLine(Ausgabe);
                            }

                            Console.WriteLine("Die eingegebene Zahl ist zu gross");
                            Console.WriteLine("   ");
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + "Sekunden gebraucht um die Richtige Zahl zu finden :-)");

                        }

                        if (Ausgabe < Zahl)
                        {
                            löschcounter += 1;
                            if (löschcounter == 5)

                            {
                                löschcounter = 0;
                                Console.Clear();
                                Console.WriteLine(Ausgabe);
                            }

                            Console.WriteLine("Die eingegebene Zahl ist zu klein");
                            Console.WriteLine("   ");
                        }
                    }
                }  //Hauptpasswort Falsch

            }
        }
    }

    class Zeit
    {
        
        public int Zeit_rechner()
        {
            
            while (true)
            {
                
                if (Sek == 60)
                {
                    Sek = 0;
                    Min; += 1;
                }

            }
        }
    }


    class Zeit_zähler
    {
        
        
        public void Zeit_rechner()
        {
            while (true)
            {
                Min += 1;
                Task.Delay(1000).Wait();
            }
        } 
    }
}
 
?
 
  • Gefällt mir
Reaktionen: adAstra und areiland
Gib mal bitte dir genaue Fehelmeldung mit hinzu. Sonst sucht man dir Nadel im Heuhaufen.;)
 
Ich schließe mich der Verwirrung an...


Was mir aber am Handy beim Überfliegen des Codes aufgefallen ist Zeile 133:

kcinay055679 schrieb:

Ich vermute mal das erste Semikolon gehört da nicht hin. Das sollte Visual Studio aber wenigstens anzeigen, weil das sonst kein gültiger Code ist.
 
Visual Studio sagt dir nur was der Compiler nicht versteht. Sek und Min sind statische member deiner Hauptklasse. Du kannst Mit Hauptklasse.Sek z.B. darauf zugreifen. Ansonsten ist da noch der Syntaxfehler, wie Raijin schon angemerkt an.

Zur Funktion oder dem Algorithmus halt mich jetzt mal zurück. Sind wohl erste Gehversuche oder?
 
Gewoehn dir mal gleich ein einheitliches Namensschema an ...
du hast

Code:
class Zeit_zähler
String Eingabe;
int löschcounter = 0;
String Hauptpasswort_Eingabe
public int Zeit_rechner()
Min
Das ist echt grauenhaft ... unabhaengig von Deutsch und Umlauten hast du quasi alles gemixt was nur geht.
In der Regel hat man sich in der C# Welt auf die Anwendung von camelCase und PascalCase geeinigt.
 
Also ich habe die doppelte Initialisierung entfernt,
Das Semikolon bei Min ist such Korrigiert.
Kann mir vielleicht jmd. erklären was pascal und camel case ist. Habe den Durchblick nicht nicht.
Und ja es sind erste Gehversuche.

Die Fehlermeldungen lauten:

Fehler CS0103 Der Name "Sek" ist im aktuellen Kontext nicht vorhanden. Hallo_Welt
Fehler CS0103 Der Name "Sek" ist im aktuellen Kontext nicht vorhanden. Hallo_Welt
Fehler CS0103 Der Name "Min" ist im aktuellen Kontext nicht vorhanden. Hallo_Welt
Fehler CS0103 Der Name "Min" ist im aktuellen Kontext nicht vorhanden. Hallo_Welt

Mein Code sieht aktuell wie folgt aus:

C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kcinay_environment
{
    
    class Hauptklasse
    {
        public static int Min = 0;
        public static int Sek = 0;




        public static void Main(string[] args)
        {
            
        String Hauptpasswort = "4K244Hz";
            String Eingabe;
            int löschcounter = 0;
            Random rnd = new Random();
            int Zahl = rnd.Next(0, 1000);
            bool abfrage = false;
            



            while (true)
            {
                Console.WriteLine("Bitte inizialisiere das Hauptpasswort");
                String Hauptpasswort_Eingabe = Console.ReadLine();
                if (Hauptpasswort_Eingabe == Hauptpasswort)
                {
                    abfrage = true;
                } //check Hauptpasswort

                if (abfrage == false)
                {
                    Console.Clear();

                    Console.WriteLine(Hauptpasswort_Eingabe + " war das falsche Passwort");
                    Task.Delay(5000).Wait();
                    Console.Clear();


                } // Hauptpaswort Richtig

                if (abfrage == true)
                {
                    Console.WriteLine("Dies ist ein Zahlenerratungs Spiel");
                    Console.WriteLine("Das Spiel beinhaltet eine Zahlenspanne von 0 - 1000");
                    Console.WriteLine("Tippe eine Zahl und das Program sagt dir ob die Gesuchte Zahl kleiner oder Grösser ist als die Eingegebene.");
                    Console.WriteLine("   ");
                    while (true)
                    {
                        Console.WriteLine("Tippe eine Zahl: ");
                        Eingabe = Console.ReadLine();

                        if (Eingabe == "Lösung")
                        {
                            Console.WriteLine("Die Lösung war: {0}", Zahl);
                            Console.WriteLine("   ");
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + "Sekunden gebraucht um die Richtige Zahl zu finden :-)");
                            Console.ReadKey();
                            break;
                        }

                        int Ausgabe = Convert.ToInt32(Eingabe);

                        if (Zahl == Ausgabe)
                        {
                            Console.WriteLine("Du hast die Richtige Zahl gefunden");
                            Console.WriteLine("Es war die Zahl {0} ", Zahl);
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + " Sekunden gebraucht um die Richtige Zahl zu finden :-)");
                            Console.ReadKey();
                            Console.Clear();
                            break;
                        }

                        if (Ausgabe > Zahl)
                        {
                            löschcounter += 1;
                            if (löschcounter == 5)
                            {
                                löschcounter = 0;
                                Console.Clear();
                                Console.WriteLine(Ausgabe);
                            }

                            Console.WriteLine("Die eingegebene Zahl ist zu gross");
                            Console.WriteLine("   ");
                            Console.WriteLine("Du hast " + Min + " Minuten und " + Sek + "Sekunden gebraucht um die Richtige Zahl zu finden :-)");

                        }

                        if (Ausgabe < Zahl)
                        {
                            löschcounter += 1;
                            if (löschcounter == 5)

                            {
                                löschcounter = 0;
                                Console.Clear();
                                Console.WriteLine(Ausgabe);
                            }

                            Console.WriteLine("Die eingegebene Zahl ist zu klein");
                            Console.WriteLine("   ");
                        }
                    }
                }  //Hauptpasswort Falsch

            }
        }
    }

    class Zeit
    {
        
        public int Zeit_rechner()
        {
            
            while (true)
            {
                
                if (Sek == 60)
                {
                    Sek = 0;
                    Min += 1;
                }

            }
        }
    }


    class Zeit_zähler
    {
        
        
        public void Zeit_rechner()
        {
            while (true)
            {
                Min += 1;
                Task.Delay(1000).Wait();
            }
        } 
    }
}

Was muss ich ändern ????????
 
Noch viel zu lernen du hast ;).
Ergänzung ()

In jeder Sprache gibt es Gültigkeitsbereiche von Variablen. Sehr viele nutzen die C Regel. Sie besagt: eine variable ist gültig ab der Definitionsstelle im kleinsten sie umgebenen Block.
Min und sek werden im Class Block Hauptklasse in einer Funktion definiert und sind nur dort gültig also sichtbar. Wenn sie public Static sind kannst du mit Hauptklasse.Min von ausserhalb der Klasse darauf zugreifen. Oder du ziehst sie in den Namespace raus womit sie auch den anderen Klassen sichtbar werden
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: areiland
kcinay055679 schrieb:
Ich weiß bin erst 14 habe also noch Zeit:
Vielen Dank für deine Hilfe es funktioniert endlich.

Lg Kcinay
Topp!

Bleib am Ball. Hab ab 12 oder so angefangen Basic zu programmieren.
 
  • Gefällt mir
Reaktionen: leprechaunwg und kcinay055679
Hallo,
das mit der Zeitmessung wird so nicht funktionieren. Bitte entferne das public static int Min und Sek, die class Zeit & Zeit_zähler und füge das hier Deinem Code hinzu:
Code:
using System.Diagnostics;
...
        static Stopwatch stopWatch;
        static void startTime() {
            stopWatch =  new Stopwatch();
            stopWatch.Start();
        }

        static String getTime() {
            long ms = stopWatch.ElapsedMilliseconds;
            int minuten = (int)(ms / 1000 / 60);
            int sekunden = (int)((ms - minuten * 1000 * 60) / 1000);
            String strReturn = "";

            if (minuten != 0)
                strReturn = minuten + " Minute" + (minuten == 1 ? "" : "n");

            if (sekunden != 0) {
                if (strReturn.Length != 0)
                    strReturn += " und ";

                strReturn += sekunden + " Sekunde" + (sekunden == 1 ? "" : "n");
            }

            return strReturn;
        }
Dann startTime() vor der while (true)-loop der Zahleneingabe.

Für die Ausgabe wenn die richtige Zahl gefunden wurde z.B:
Code:
Console.WriteLine("Du hast " + getTime() + " gebraucht um die Richtige Zahl zu finden :-)");
Und falls die Zahl zu groß/klein ist:
Code:
Console.WriteLine("Du hast bisher " + getTime() + " gebraucht.");

Viel spaß weiterhin beim coden. :D
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: leprechaunwg
Ich habe noch mal eine Frage bei Zeile 82 erkennt Visual Studio es als Fehler an, das der Wert eines Case Zahlenspiel ist.
Was habe ich falsch gemacht, habe gerade gefühlt alles ausprobiert und komme nicht weiter.
Bitte um um schnelle Hilfe:
Danke im Voraus!!

Mein Code;
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Media;
using System.Drawing;


namespace Kcinay_environment
{

    class Hauptklasse
    {
        public static void Main( string[] args )
        {
            String EingabeModul;
            String EingabeZahlenspiel;
            String AktuellerBenutzer;
            String EingabeBenutzer;
            String[] BenutzerListe = new string[4];
            BenutzerListe[0] = "Yanick";
            BenutzerListe[1] = "Pfanner";
            BenutzerListe[2] = "Housi";
            BenutzerListe[3] = "Barbara";         
            Random rnd = new Random();
            int löschcounter = 0;
            int Zahl = rnd.Next(0, 1000);
            int Versuche = 0;
            
            while (true)
            {
                Console.WriteLine("Bitte melde dich mit deinem Benutzernamen an");
                EingabeBenutzer = Console.ReadLine();
                if (BenutzerListe[0] == EingabeBenutzer)
                {
                    AktuellerBenutzer = "Yanick";
                    break;
                }
                if (BenutzerListe[1] == EingabeBenutzer)
                {
                    AktuellerBenutzer = "Pfanner";
                    break;
                }
                if (BenutzerListe[2] == EingabeBenutzer)
                {
                    AktuellerBenutzer = "Housi";
                    break;
                }
                if (BenutzerListe[3] == EingabeBenutzer)
                {
                    AktuellerBenutzer = "Barbara";
                    break;
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Bitte melde dich mit einem gültigen Benutzernamen an");
                    Console.ReadKey();
                    Console.Clear();
                }
            }
            Console.WriteLine(" ");
            Console.WriteLine("Du bist als " + AktuellerBenutzer + " angemeldet");
            Console.WriteLine(" ");
            Console.WriteLine("Was möchtest du machen");
            Console.WriteLine("Dir stehen folgende Möglichkeiten zur verfügung");
            Console.WriteLine(" ");
            Console.WriteLine(" ");
            Console.WriteLine("Zahlenspiel");
            Console.WriteLine("Dieses Produkt wird noch entwickelt");
            Console.WriteLine("Dieses Produkt wird noch entwickelt");
            Console.WriteLine("Dieses Produkt wird noch entwickelt");
            Console.WriteLine("Dieses Produkt wird noch entwickelt");
            Console.WriteLine("Zum benutzen den Programmnamen eingeben ");
            EingabeModul = Console.ReadLine();
            switch (EingabeModul)
            {
                case Zahlenspiel:
                    {
                        SoundPlayer simpleSound = new SoundPlayer(@"C:\Users\yamin\source\repos\Hallo_Welt\Hallo_Welt\bin\Debug\Tickende_Uhr.wav");
                        simpleSound.Play();
                        Console.WriteLine("Dies ist ein Zahlenerratungs Spiel");
                        Console.WriteLine("Das Spiel beinhaltet eine Zahlenspanne von 0 - 1000");
                        Console.WriteLine("Tippe eine Zahl und das Program sagt dir ob die Gesuchte Zahl kleiner oder Grösser ist als die Eingegebene.");
                        Console.WriteLine("   ");

                        Task.Delay(3000).Wait();
                        Console.Clear();
                        startTime();
                        while (true)
                        {
                            Console.WriteLine("Tippe eine Zahl: ");
                            EingabeZahlenspiel = Console.ReadLine();

                            if (EingabeZahlenspiel == "Lösung")
                            {
                                Console.Clear();
                                Console.WriteLine("Die Lösung war: " + Zahl);
                                Console.WriteLine("   ");
                                Console.WriteLine("Du hast " + getTime() + " gebraucht um die Richtige Zahl zu finden :-)");
                                simpleSound.Stop();
                                Console.ReadKey();
                                break;
                            }

                            int Ausgabe = Convert.ToInt32(EingabeZahlenspiel);

                            if (Zahl == Ausgabe)
                            {
                                Console.Clear();
                                Console.WriteLine("Du hast die Richtige Zahl gefunden");
                                Console.WriteLine("Es war die Zahl " + Zahl);
                                Console.WriteLine("Du hast " + getTime() + " gebraucht um die Richtige Zahl zu finden :-)");
                                Console.WriteLine("Du hast Insgesammt " + Versuche + " Versuche gebraucht.");
                                simpleSound.Stop();
                                Console.ReadKey();
                                Console.Clear();
                                break;
                            }

                            if (Ausgabe > Zahl)
                            {
                                löschcounter += 1;
                                if (löschcounter == 3)
                                {
                                    löschcounter = 0;
                                    Console.Clear();
                                    Console.WriteLine(Ausgabe);
                                }
                                Versuche += 1;
                                Console.WriteLine("Die eingegebene Zahl ist zu gross");
                                Console.WriteLine("   ");
                                Console.WriteLine("Du hast bisher " + getTime() + " gebraucht.");
                                Console.WriteLine("Du hast bisher " + Versuche + " Versuche gebraucht.");
                                Console.WriteLine("   ");
                                Console.WriteLine("   ");

                            }

                            if (Ausgabe < Zahl)
                            {
                                löschcounter += 1;
                                if (löschcounter == 3)

                                {
                                    löschcounter = 0;
                                    Console.Clear();
                                    Console.WriteLine(Ausgabe);
                                }
                                Versuche += 1;
                                Console.WriteLine("Die eingegebene Zahl ist zu klein");
                                Console.WriteLine("   ");
                                Console.WriteLine("Du hast bisher " + getTime() + " gebraucht.");
                                Console.WriteLine("Du hast bisher " + Versuche + " Versuche gebraucht.");
                                Console.WriteLine("   ");
                                Console.WriteLine("   ");
                                Console.WriteLine("   ");
                            }
                        }
                        break;
                    }


            }

          
        }
        static Stopwatch stopWatch;
        static void startTime()
        {
            stopWatch = new Stopwatch();
            stopWatch.Start();
        }

        static String getTime()
        {
            long ms = stopWatch.ElapsedMilliseconds;
            int minuten = (int)(ms / 1000 / 60);
            int sekunden = (int)((ms - minuten * 1000 * 60) / 1000);
            String strReturn = "";

            if (minuten != 0)
                strReturn = minuten + " Minute" + (minuten == 1 ? "" : "n");

            if (sekunden != 0)
            {
                if (strReturn.Length != 0)
                    strReturn += " und ";

                strReturn += sekunden + " Sekunde" + (sekunden == 1 ? "" : "n");
            }

            return strReturn;
        }
    }
}
 
Du machst switch auf einen String. Im case steht aber kein String.
 
Case mag Zahlen und macht bei dir keinen Sinn. Auch die switch macht keinen erkennbaren Sinn. Die Variable Zahlenspiel ist nicht definiert vom Datentyp.
 
Ich weiß nicht, ob fertiger Code zielführend ist wenn Du programmieren lernen möchtest.
Wenn Du lernen wolltest, wie man malt würdest Du Dich ja auch nicht an einen Maler wenden und sagen: "Hier. mach Du mal".
 
  • Gefällt mir
Reaktionen: new Account()

Ähnliche Themen

Zurück
Oben