Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Methode mit Random liefert bei mehrmaligen Aufruf das gleiche Ergebnis
LeoBold
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

Methode mit Random liefert bei mehrmaligen Aufruf das gleiche Ergebnis

beantworten | zitieren | melden

Hallo zusammen,

ich habe eine einfache Konsolenanwendung, die zwei Karten eines durch ein Array definiertes Kartendeck ausgeben soll.

        private string[] colors = {"Hearts","Diamonds","Spades","Clubs" };
        private string[] cards = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};

        public string GetACard()
        {
            string card = cards[new Random().Next(0, cards.Length)];
            string color = colors[new Random().Next(0, colors.Length)];
            return card + " " + color;
        }

In meinem Programm möchte ich nun zweimal GetACard() aufrufen. Verständlicherweise gibt mir er mir zweimal die selbe Karte aus. Ich möchte aber zwei verschiedene Karten haben.

Leider finde ich keine Schlagwörter, nach denen ich googeln könnte. Ist es überhaupt der richtige Ansatz, zweimal die "GetACard()" Methode aufzurufen?

(Mir ist bewusst, die Logik noch nicht in Ordnung ist, da die Karte nicht aus dem Deck verschwindet)

Danke!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Liegt daran: [FAQ] Random.Next liefert eine Zeit lang die gleiche Zufallszahl - Warum? Wie geht es richtig?
private Nachricht | Beiträge des Benutzers
LeoBold
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Dank dir für den Hinweis. Ich dachte es liegt daran, das der Ansatz generell falsch ist
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 706
Herkunft: OWL

beantworten | zitieren | melden

Man könnte auch alle möglichen Karten generieren, die Auflistung zufällig mischen und immer die erste/letzte Karte zurückgeben und aus der Auflistung entfernen. Dadurch wäre sichergestellt, dass keine Karte des Decks doppelt zurückgegeben wird.

Alternativ kann man sich natürlich auch die bereits zurückgegebenen Karten merken.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.829
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

od. entsprechend [Snippet] Zufallszahlen, die sich nicht wiederholen Mischen und dann einfach die Karten herauspicken. Dazu könnte das "Gemischte" in einen Stack<T> kommen od. einfach einen Index-Zähler erhöhen.

Damit sollte für diese Thema alles gesagt worden sein, zumal so ein ähnliches Thema erst vor Kurzem dran war...bei Bedarf bitte danach suchen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers