Zufallszahlen in C# sollen nicht doppelt vorkommen

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Da ich nicht weiß ob es sich hierbei um eine Hausaufgabe handelt, schreibe ich hier keine Lösung rein, sondern gebe Dir nur allgemeine Lösungstips. Am meisten Lernt man immer noch wenn man sich selbst über ein Problem den Kopf zerbricht. Generell gibt es ja viele Lösungsmöglichkeiten, daher einige Denkanstöße.

Listen / Arrays / Collections haben die Funktion Contains(). Damit kannst Du ganz einfach Prüfen ob eine Zahl schon vorhanden ist. Du kannst natürlich wenn Du Lust hast auch selber eine Funktion schreiben die das prüft.

Anstatt z.B. einer for Schleife könntest Du auch eine while Schleife nehmen die dann abbricht wenn eine bestimmte Anzahl an Zufallszahlen in ein Array / Liste / Collection... hinzugefügt wurde. Deine Zählvariable in der Du festhältst wie viele Zufallszahlen bereits hinzugefügt wurden Zählst Du nur dann um 1 nach oben wenn Du eine Zahl hinzugefügt hast Die noch nicht enthalten ist.

Viel Spaß beim Knobeln ;) Aller Anfang ist schwer :)

Wenn du eine List verwendest kannst du ganz einfach contains() verwenden:

    static void Main(string[] args)
    {
        int numberOfRandomNumbers = 8;
        List<int> randomNumbers = new List<int>();
        Random random = new Random();
        while (randomNumbers.Count < numberOfRandomNumbers + 1)
        {
            int randomInt = random.Next(0, 46);
            if (!randomNumbers.Contains(randomInt))
            {
                randomNumbers.Add(randomInt);
            }
        }
        randomNumbers.Sort();
        foreach (var number in randomNumbers)
        {
            Console.WriteLine(number);
        }
    }
Woolli  22.09.2014, 11:13

contains gibts naturlich auch fuer arrays ....

0

bau doch einfach für

zahlen[start] = rnd.Next(0, 46);

folgendes ein:

bool neu = true;
do
{
   zahlen[start] = rnd.Next(0, 46);
   for(int i=start-1 ; i  >= 0 ; i --)
     if ( zahlen[i] == zahlen[start])
     { 
     neu=false;
     break;
     }

} while(!neu);

Du kannst ein zweites boolean Array nehmen mit Größe der Anzahl der Zahlen die du haben willst und immer, wenn diese Zahl dran kam auf true setzen.

Vorher dann abfragen, ob die Zahl schon auf true steht, wenn ja dann noch einmal würfeln lassen.

Im Prinzip genauso wie DasLoslager gesagt hat, nur die for-Schleife ist nicht nötig.

var itemExists = Array.contains(array, item);

...liefert dir einen Boolean-Wert zurück, der dir sagt, ob das item im array ist.