Laden...

Wie prüfe ich, ob ein Wert doppelt per Random ausgewählt wurde?

Erstellt von claubinh# vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.841 Views
C
claubinh# Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren
Wie prüfe ich, ob ein Wert doppelt per Random ausgewählt wurde?

Hallo,

ich habe gleiches Problem aber anders angesetzt. Vorab: Ich bin eigentlich quereinsteiger und hatte noch nicht soo viel mit programmiersprachen am Hut. Finde ich aber hoch interessant. - Egal jetzt zum eigentlichen Thema:

Für einen Großen Lottoschein habe ich eine Anwendung geschrieben, die mir auch soweit (so gut) über ein mehrdimensionales array für 3 Lottoscheine

  public Form1()
        {
            InitializeComponent();
        }

        private Random r = new Random();

        private void cmdAnzeigen_Click(object sender, EventArgs e)
        {
            int[, ,] c = new int[6, 3, 6];
            int MinWert;
            int MaxWert;

            lblFeld.Text = "";
            for (int i=0; i<=c.GetUpperBound(0); i++)
            {
                for (int j=0; j<=c.GetUpperBound(1); j++)
                {
                    lblFeld.Text += "( ";
                    for (int k=0; k<=c.GetUpperBound(2); k++)
                    {
                        c[i, j, k] = r.Next(01, 49);
                        /* if (???????) ; //Prüfung ob ein Wert doppelt per Random ausgewählt wurde, Schleife dann wieder von vorne beginnen.
                            continue;  */
                        lblFeld.Text += c[i, j, k] + " ";
                    }
                    lblFeld.Text += ") ";
                }
                lblFeld.Text += "\n";
            }
        }
    }
}

Mir ist bewusst, dass ich in der innersten Schleife auf doppelte Werte prüfen muss. Aber ich weiss nicht welche Methode ich dafür anzuwenden habe? if(c.value....???)
Kann hier jemand weiterhelfen?

Vielen Dank und stay coding...

coding is not a crime!

5.299 Beiträge seit 2008
vor 7 Jahren

2 Dinge:1.Das ist nicht gern gesehen, wenn man seine Fragen an uralte Themen anhängt - die evtl. auch garnix mit zu tun haben 1.Ich kann deine Frage ühaupt nicht verstehen - lies sie nochmal selber:

Für einen Großen Lottoschein habe ich eine Anwendung geschrieben, die mir auch soweit (so gut) über ein mehrdimensionales array für 3 Lottoscheine.
Mir ist bewusst, dass ich in der innersten Schleife auf doppelte Werte prüfen muss. Aber ich weiss nicht welche Methode ich dafür anzuwenden habe? if(c.value....???)
Kann hier jemand weiterhelfen?

Mir ist ganz unklar, wobei dir weiterzuhelfen ist.

Der frühe Apfel fängt den Wurm.

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

zu Beginn erstmal 2 Fragen:

  1. Sicher, dass du ein 3-dimensionales Array willst? Ich kenne kein Blatt Papier, das in der Lage ist Informationen aus 3 Dimensionen praktisch darzustellen und behaupte somit, dass du mit 2 Dimensionen gut bedient bist

  2. Warum muss dein Array aufgebaut sein wie die Oberfläche, auf der du die Infos deines Arrays irgendwann später vll mal anzeigen möchtest? Es wäre doch vollkommen ausreichend eine List<T> zu verwenden in die du einfach Breite*Tiefe Items einfügst.

Die List<T> verfügt dann übrigens über die Methode Contains, welche prüfen kann, ob eine bestimmte Zahl bereits ausgewählt wurde...

LG

W
872 Beiträge seit 2005
vor 7 Jahren

random number generator with no duplicates


HashSet<int> numbers = new HashSet<int>();
while (numbers.Count < 6) {
    numbers.Add(random.Next(1, 49));
}

ist die einfachste Lösung davon.

16.842 Beiträge seit 2008
vor 7 Jahren

Für die Anfänger hier als Hinweis:
weismats Beispiel ist hier wirklich am Besten. HashSet hat die Eigenschaft jedes Element (hier ein Int) nur einmalig in der Collection zu halten.
Add gibt false zurück, wenn das Element bereits enthalte ist. Alle anderen Collections haben keine Returnvalue beim Add.
Dadurch spart man sich das Contains.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo,

siehe u.a. auch [Snippet] Zufallszahlen, die sich nicht wiederholen (passend zum Titel).
Speziell fürs Problem die HashSet-Variante 😉

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!"

C
claubinh# Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren

Also erstmal vielen Dank für all eure Antworten!
@ ErfinderDesRades:
Du hast recht. Nachdem ich mir die Frage heutemorgen nochmal durchgelesen habe, verstand ich die selbst nicht mehr 😁

@ Taipi:
Das stimmt komplett, solange ich nur einen Lottoschein ausfüllen möchte (und nicht mehrere)
Das Mehrdimensionale array ist dafür da, mehrere Lottoscheine zu generieren. In diesem Fall 3.
Das war ja aber nicht meine Frage 😉

@ weismat:
Es scheint wohl, dass du trotz meiner konfusen Satzstellung verstanden hast, was ich gesucht habe 😁
Danke!

@Abt:
Danke!

@gfoidl:
Also durch den code blicke ich noch nicht ganz durch... Dafür stehe ich wohl noch zu weit am Anfang meiner Coder-Karriere 😛

Beste Grüße,
claubinh#

coding is not a crime!

C
2.122 Beiträge seit 2010
vor 7 Jahren

Ich würde das anders angehen, sonst blickst du da nicht mehr durch.
Nicht wiederholende Zufallszahlen erzeugen, siehe Link von gfoidl.
Das ganze für nur einen Lottoschein ausprogrammieren, die Methode die das kann rufst du dann für mehrere Scheine separat auf.

Warum 3-dimensional? Ein einfaches Array reicht, mit allen Zahlen drin. Wie die dann angeordnet sind kannst du dir aus der Zahl errechnen.