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
Würfel-Zufall macht zu oft "1"
ImInneren
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Würfel-Zufall macht zu oft "1"

beantworten | zitieren | melden

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)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ImInneren am .
private Nachricht | Beiträge des Benutzers
Yankyy02
myCSharp.de - Member



Dabei seit:
Beiträge: 8

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Yankyy02 am .
private Nachricht | Beiträge des Benutzers
ImInneren
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Finde die passende Antwort dazu nicht :/
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.207
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Zitat von ImInneren
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
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 246
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ImInneren am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.929

beantworten | zitieren | melden

Zitat von https://msdn.microsoft.com/de-de/library/system.random%28v=vs.110%29.aspx
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
private Nachricht | Beiträge des Benutzers
Section31
myCSharp.de - Member



Dabei seit:
Beiträge: 64
Herkunft: Leipzsch

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ImInneren
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 180

beantworten | zitieren | melden

erstellst du das Random objekt immer wieder neu? Z.b. in seiner Schleife?
private Nachricht | Beiträge des Benutzers
Spyke
myCSharp.de - Member



Dabei seit:
Beiträge: 145

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
CoLo
myCSharp.de - Member



Dabei seit:
Beiträge: 224

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
ImInneren
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

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! :)
private Nachricht | Beiträge des Benutzers