Laden...

Random-Werte aus Integer-Liste sind immer gleich

Erstellt von Reezon vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.598 Views
R
Reezon Themenstarter:in
10 Beiträge seit 2017
vor 7 Jahren
Random-Werte aus Integer-Liste sind immer gleich

Hey Leute,

hab vor einigen Tagen mit c sharp angefangen.
Möchte nun ein lottospiel programmieren ( 6 aus 49 ).
dazu möchte ich 6 random generierte variablen ausgeben ( die, die im echten leben gezogen werden ).
nun habe ich ein problem.
Die variablen, die dann beim random ausgegeben werden sind alle gleich ( manchmal ist eine anders ) .
Ich wollte nun wissen wie ich das realisieren könnte ?
ich hab euch unten den code eingefügt ( habe ich evtl. etwas komplett falsch gemacht ? )
ich habs gerade erst angefangen ( 5 min oder so ) und bin dementsprechend erst so weit
ich habe dazu noch den text , wie zB geben sie die zahlen ein und so , die wollt ich euch hier jetzt ersparen.
Danke im Vorraus ! : )



Random l1 = new Random();
            int lotto1 = l1.Next(1, 49);

            Random l2 = new Random();
            int lotto2 = l2.Next(1, 49);

            Random l3 = new Random();
            int lotto3 = l1.Next(1, 49);

            Random l4 = new Random();
            int lotto4 = l4.Next(1, 49);

            Random l5 = new Random();
            int lotto5 = l5.Next(1, 49);

            Random l6 = new Random();
            int lotto6 = l6.Next(1, 49);


Console.WriteLine();
            int guess1 = Convert.ToInt32(Console.ReadLine());
            int guess2 = Convert.ToInt32(Console.ReadLine());
            int guess3 = Convert.ToInt32(Console.ReadLine());
            int guess4 = Convert.ToInt32(Console.ReadLine());
            int guess5 = Convert.ToInt32(Console.ReadLine());
            int guess6 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine();
            Console.WriteLine(lotto1);
            Console.WriteLine(lotto2);
            Console.WriteLine(lotto3);
            Console.WriteLine(lotto4);
            Console.WriteLine(lotto5);
            Console.WriteLine(lotto6);
            Console.ReadLine();

🙁

D
9 Beiträge seit 2015
vor 7 Jahren
D
985 Beiträge seit 2014
vor 7 Jahren

Hier mal ein kleines Konsolenprogramm zum Ziehen der Lottozahlen (nein, nicht die echten):


    class Program
    {
        static void Main( string[] args )
        {
            var ziehung6aus49 = Enumerable.Range( 1, 49 )
                .Shuffle( )
                .Take( 7 ) // 6 mit Zusatzzahl
                .ToList( );

            var superZahl = Enumerable.Range( 0, 9 )
                .Shuffle( )
                .First( );

            var zeitpunkt = DateTime.Now;
            var gewinnZahlen = ziehung6aus49.Take( 6 ).ToList( );
            var zusatzZahl = ziehung6aus49.Last( );

            Console.WriteLine(
                "Ziehung vom {0} um {1}: {2} Zusatzzahl: {3} Superzahl: {4}",
                zeitpunkt.ToShortDateString( ),
                zeitpunkt.ToShortTimeString( ),
                string.Join( ", ", gewinnZahlen ),
                zusatzZahl,
                superZahl);
        }
    }

    public static class EnumerableExtensions
    {
        private static readonly Random _rng = new Random( );

        public static IEnumerable<T> Shuffle<T>( this IEnumerable<T> source )
        {
            return source.Shuffle( _rng );
        }

        public static IEnumerable<T> Shuffle<T>( this IEnumerable<T> source, Random rng )
        {
            if ( source == null )
                throw new ArgumentNullException( nameof( source ) );
            if ( rng == null )
                throw new ArgumentNullException( nameof( rng ) );

            return source.ShuffleIterator( rng );
        }

        private static IEnumerable<T> ShuffleIterator<T>(
            this IEnumerable<T> source, Random rng )
        {
            var buffer = source.ToList( );
            for ( int i = 0; i < buffer.Count; i++ )
            {
                int j = rng.Next( i, buffer.Count );
                yield return buffer[ j ];

                buffer[ j ] = buffer[ i ];
            }
        }
    }

16.834 Beiträge seit 2008
vor 7 Jahren

Nur ein Hinweis für potentielle Leser: Zusatzzahl gibt es heute nicht mehr.

U
57 Beiträge seit 2013
vor 7 Jahren

Hi Reezon...

falls Du(als Anfänger), nach Sir Rufo's Code, noch im Koma liegst und verzweifelst, hab ich hier auch noch einen Codeschnipsel zum Lotto. 😁
(hab den vor ca. 25 Jahren geschrieben) 8o

Das ganze ist natürlich sehr billig und verstößt sicher gegen alle Regeln der OOP.
(aber vielleicht hilft es Dir um ein paar Befehle und Techniken kennen zu lernen)


    class Program
    {
        static void Main(string[] args)
        {
            bool[] zahlen = new bool[49];   // Hilfsarray um bereits gezogene Zahlen zu markieren
            Random rnd = new Random(Environment.TickCount); // Zufallsgenerator(init. mit Millisekunden seit PC-Start)

            Console.WriteLine("*** Lottozahlen ***");
            Console.WriteLine();

            int iTreffer = 0;
            do
            {
                int r = rnd.Next(0, 49);
                if (zahlen[r] == false)     // ist die Zahl noch frei?
                {
                    zahlen[r] = true;       // dann zahl belegen
                    iTreffer++;             // Treffer erhöhen
                }
            }
            while (iTreffer < 6);           // renn solange bis Du 6 Treffer hast
            

            // AUSGABE....Lottozahlen
            Console.Write("Ergebnis:");
            for (int i = 0; i < 49; i++)
            {
                if (zahlen[i] == true)      
                {
                    Console.Write(" " + (i + 1));
                }
            }
             // AUSGABE....Superzahl           
            Console.Write(" (Superzahl: " + rnd.Next(0, 10) + ")");  // Superzahl von 0 - 9
            
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("Press any key to exit...");

            Console.ReadKey();
        }

    }

Viel Spaß beim basteln... 👍

D
985 Beiträge seit 2014
vor 7 Jahren

Was ist denn so schlimm an meinem Code (von der Zusatzzahl abgesehen - damals gab es die noch).

Mein Code macht exakt das was da bei der Lottoziehung passiert.*Man nehme 49 Kugeln nummeriert von 1 bis 49 *schüttelt diese ordentlich durch *zieht 6 Kugeln *und man hat die Gewinnzahlen

Noch einfacher geht es doch gar nicht 😁

U
57 Beiträge seit 2013
vor 7 Jahren

^^Um Gottes Willen, ich wollte auf keinen Fall meckern, dein Code is der Hammer...1000% OOP 👍
Aber ich kann mit den "Anfängern" mitfühlen und bin sicher, dass ER damit VÖLLIG überfordert ist 😁

D
985 Beiträge seit 2014
vor 7 Jahren

War mir doch klar ... darum doch auch der 😁

U
57 Beiträge seit 2013
vor 7 Jahren

^^Hatte damals(als es die Zusatzzahl noch gab) eine RunesOfMagic-Lotto-Wett-Website.
Dort konntest du IngameGold verwetten auf Lotto.
(Konntest Gold per Briefkasten zu mir senden und das wurde auf Dein WebSiteKonto aufgeladen)
Zusatzzahl(1-49) UND Superzahl(0-9) ergab die Gewinnzahl...
Also min. (1)(0) bis max. (49)(9) == 10-499 (Gewinnchance 1:489)
(Volltreffer == Jackpot, sonst Nächster DRAN == 90% vom Einsatz)

War ein großer Erfolg mit vielen Tippern 😁

M
19 Beiträge seit 2012
vor 7 Jahren

Klugsch.. Modus:

Eigentlich 1/490

Z1 aus { 1, ... , 49 }
Z2 aus { 0, ... , 9 }
Ergebnismenge = { (z1; z2) aus Z1xZ2 }

|Ergebnismenge| = |Z1|*|Z2| = 49 * 20 = 490

R
Reezon Themenstarter:in
10 Beiträge seit 2017
vor 7 Jahren

Oh danke erstmal für die viele Unterstützung : D
mein handy zeigt es mir normalerweise an , wenn jmd auf meinen beitrag reagiert, es hat nichts angezeigt , deswegen habe ich euch nicht geantwortet ( nicht böse sein ) .

jz zu den codes ...
tja, ich habe es in der zwischenzeit schon aufgegeben .
nun sehe ich auch warum
die hälfte der in eurem code vorkommenden befele kenn ich überhaupt nicht ... sprich: ich habe keine ahnung was dieser code nun eigentlich macht ( durch eure kommentare daneben teilweise )
muss mich wohl noch nen bissel belesen bis ich bereit für sowas bin ^^ ( dachte das is wesentlich einfacher ).
ich finde halt keine aufgaben, die von der schwierigkeit zwischen taschenrechner programmieren ( son einfaches plus minus mal geteilt zeug ) und lotto programmieren ist.
lotto ist mir dann doch zu schwer , weil ich die logik dahinter noch nicht verstehe.

werde es jedoch mal ausprobieren , danke euch vielmals : )

🙁

U
1.688 Beiträge seit 2007
vor 7 Jahren

Die variablen, die dann beim random ausgegeben werden sind alle gleich ( manchmal ist eine anders ) .

Dein Fehler ist ja in erster Linie dass Du sehr schnell hintereinander neue Random-Instanzen erzeugst. Du brauchst hier ohnehin nur eine. Ich nehme an, den Link von DMDoniz hast Du nicht gelesen?

Trotzdem kann es natürlich vorkommen, dass mehrfach "zufällig" die selbe Zahl gewürfelt wird. Das musst Du also prüfen und neu würfeln.