Laden...

Zufälliger Tag aus einem zufälligen Monat wählen

Erstellt von 1a0r6.44 vor 3 Jahren Letzter Beitrag vor 3 Jahren 798 Views
1
1a0r6.44 Themenstarter:in
1 Beiträge seit 2020
vor 3 Jahren
Zufälliger Tag aus einem zufälligen Monat wählen

Hallo,

ich möchte einen zufälligen Tag aus einem zufälligen Monat auswählen:


string[] monate = { "01", "02" /*, "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" */ };
            Random rand_monate = new Random();
            int index_monate = rand_monate.Next(monate.Length);
            string.Join("", monate);

            switch (monate[index_monate])
            {
                case "01":
                    string[] tage = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" };
                    break;

                case "02":
                string[] tage = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28" };
                    break;
                   
            }
            Random rand_tage = new Random();
            int index_tage = rand_tage.Next(tage.Length);
            string.Join("", tage);

Bei den Tagen bekomme ich die Fehlermeldung, dass> Fehlermeldung:

Der Name "tage" ist im aktuellen Kontext nicht vorhanden" ist.
Ich habe zwar den Fehlercode gelesen, kann das aber als Anfänger nicht umsetzen und verstehe noch nicht, was MS von mir möchte.
Vielleicht kann mir ja hier jemand helfen.
VG, Tim

T
2.219 Beiträge seit 2008
vor 3 Jahren

Das Problem ist die Sichtbarkeit (Scope) deiner Tage Arrays.
Diese sind nur innerhalb der jeweiligen case der switch Anweisung gültig und sichtbar.
Damit es funktioniert, müsstest du dein Array vor dem switch mit folgendem Code anlegen


string[] monate = { "01", "02" /*, "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" */ };
Random rand_monate = new Random();
int index_monate = rand_monate.Next(monate.Length);
string.Join("", monate);
string[] tage = null

switch (monate[index_monate])
{
    case "01":
        tage = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" };
        break;

    case "02":
        tage = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28" };
        break;

    }

Random rand_tage = new Random();
int index_tage = rand_tage.Next(tage.Length);
string.Join("", tage);

Anbei noch ein paar Tipps.
Du solltest Random immer mit einem seed befüllen, da sonst die Startzeit des Systems verwendet wird.
Aktuell bekommst du keine richtigen Zufallszahlen sondern immer die gleichen!

Auch hast du vor dem switch ein string.join, was die Rückgabe aber nicht nutzt und somit unnötig ist bzw. fehlt dort eine Variable um den Wert aufzunehmen.

Auch solltest du dir mal DateTime anschauen, wenn du ggf. auch Schaltjahre für Februar prüfen und beachten willst.
Auch könnte man den Code überarbeiten um anstelle von String für Tage gleich int zu verwenden, was den Tag besser abbildet.
Da ich aber bis auf die String.Join Aufrufe nicht sehe, was du noch alles damit machst, ist der aktuelle Ansatz sparsamer mit Umwandlungen zwischen den Datentypen(int -> String | String -> int) etc.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 3 Jahren

Wieso machst Du das nicht einfach mit der DateTimeOffset Klasse?

Braucht man keine 5 Zeilen Code und hat danach wirklich ein valides Ergebnis.