Laden...

Würfel-Zufall macht zu oft "1"

Erstellt von ImInneren vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.713 Views
I
ImInneren Themenstarter:in
5 Beiträge seit 2015
vor 9 Jahren
Würfel-Zufall macht zu oft "1"

Hallo, folgendes Problem:
Mein Würfelgenerator zeigt sehr häufig die Zahl "1" an, sehr oft sogar bei 5, 7 oder 10 gewürfelten Würfeln nur Einsen.
Wie kann ich das unterbinden?
Hab schon 10x eine if else gemacht, falls er 1 würfelt, soll er den Wurf wiederholen, selbst da kommt sehr häufig nur "1" raus, sogar noch bei ALLEN Ergebnissen.

Das ist mein Code:

int Wuerfel1 = 0;
            Random dice1 = new Random();

            switch (WuerfelartSpieler1.SelectedIndex)
            {
                case 0: Wuerfel1 = 4;
                    break;
                case 1: Wuerfel1 = 6;
                    break;
                case 2: Wuerfel1 = 8;
                    break;
                case 3: Wuerfel1 = 10;
                    break;
            }

            if (Wuerfel1 != 0)
            {
                for (int i = 0; i <= WuerfelzahlSpieler1.SelectedIndex; i++)

                {
                    Wuerfel1 = dice1.Next(1, Wuerfel1 + 1);

                    ErgebnisSpieler1.AppendText(Wuerfel1 + ", ");

Hier ein Beispiel, wenn ich beide gleichzeitg würfeln lasse (erster Klick, hab nicht länger probiert)

Y
11 Beiträge seit 2014
vor 9 Jahren

Hallo ImInneren,

auf der MSDN Seite zur Random Klasse wird dein Problem erklärt und was man dagegen machen kann! Schau dir dazu die Erklärung zum zweiten Konstruktor von Random an! Random(Int32).

LG
Gery

I
ImInneren Themenstarter:in
5 Beiträge seit 2015
vor 9 Jahren

Finde die passende Antwort dazu nicht 😕

2.207 Beiträge seit 2011
vor 9 Jahren

Finde die passende Antwort dazu nicht 😕

Hallo ImInneren,

erwarte bitte nicht, dass dir so etwas hier vorgekaut wird. Du hast eine Antwort bekommen. Was hast du denn darauf basierend probiert? Was hast du verändert? Wir erwarten hier Eigeninitiative. D.h. , dass so etwas wie "geht nicht" und "Ich finde es nicht" hier absolut nicht hinein passt.

[Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1 und Punkt 4 komplett

Gruss

Coffeebean

I
ImInneren Themenstarter:in
5 Beiträge seit 2015
vor 9 Jahren

Coffeebean,

ich hab mich auf der Microsoft-Seite komplett umgesehen, ob da das erklärt wird. Ich hab den Begriff erstmal gegoogelt, da ich mit Kürzeln nicht viel anfangen konnte, so kam ich auf die Seite von Microsoft. Da hab ich die Begriffe in die Suchfunktion und andere eingegeben und mir mehrere Artikel durchgelesen. Aber nirgends stand mein Problem beschrieben.

Schaue mir eben den Beitrag von Jamikus durch, lese mich da rein.

16.807 Beiträge seit 2008
vor 9 Jahren

Pseudozufallszahlen werden mit gleicher Wahrscheinlichkeit aus einer endlichen Menge von Zahlen ausgewählt. Die ausgewählten Zahlen sind nicht absolut zufällig, da bei ihrer Auswahl ein endlicher mathematischer Algorithmus verwendet wird...

Die Erzeugung der Zufallszahlen startet von einem Startwert. Wenn derselbe Startwert wiederholt verwendet wird, führt dies dazu, dass dieselbe Zahlenfolge erzeugt wird. Eine Möglichkeit, die Erzeugung unterschiedlicher Zahlenfolgen zu gewährleisten, besteht darin, den Startwert zeitabhängig zu machen. Dabei wird für jede neue Instanz von Random eine neue Zahlenfolge erzeugt.......

So genau scheinste die Doku also gar nicht angeschaut zu haben 😉
Soviel nur als Hinweis.

C# Random-Klasse

S
64 Beiträge seit 2008
vor 9 Jahren

Ich geb mal einen noch etwas genaueren Hinweis.

Lies dir mal Random.Next-Methode durch und schau mal, wie du die Next-Methode verwendest, dann sollte dir ganz schnell klar, warum du irgendwann nur noch die Eins bekommst.

Grüße
Maik

I
ImInneren Themenstarter:in
5 Beiträge seit 2015
vor 9 Jahren

Ich hab jetzt schon verschiedene Varianten ausprobiert, hab also z.B.

Random dice1 = new Random((int)DateTime.Now.Millisecond * (int)DateTime.Now.Millisecond);

schon gemacht, damit er mir einen zufällig generierten Seed aus der Zeit nimmt (da diese sich ja ständig ändert). Aber auch schon mit

Random dice1 = new Random((int)DateTime.Now.Ticks);

etc. gearbeitet... Es kommen dennoch sehr häufig Einsen und inzwischen auch viele Zweier...

C
180 Beiträge seit 2011
vor 9 Jahren

erstellst du das Random objekt immer wieder neu? Z.b. in seiner Schleife?

S
145 Beiträge seit 2013
vor 9 Jahren

Instanziiere nur einmal dice1 (dein Random Objekt) (z.B. als privates Feld in deiner Form) und nimm immer dieses Objekt zum liefern der Zufallszahl her.

Ist glaube ich ein bekanntes problem von Random, wenn es zu oft hintereinander neu angefordert wird das dann immer der gleiche Wert geliefert wird.

C
224 Beiträge seit 2009
vor 9 Jahren

Hier ist ein Fehler:


Wuerfel1 = dice1.Next(1, Wuerfel1 + 1);

Hier ist Wuerfel1 das Ergebnis und die Anzahl Würfelseiten.
Somit ist es sehr wahrscheinlich, dass Wuerfel1 nach jedem Schleifendurchlauf kleiner wird.

I
ImInneren Themenstarter:in
5 Beiträge seit 2015
vor 9 Jahren

Jop, das ist der Fehler, haben wir rausgefunden 😃
Haben jetzt zusätzlich sogar nen anderen Generator kreiert, hat mein Kollege gemacht.
Jetzt geht es Einwandfrei!

Danke an alle trotzdem! 😃