Zufallszahlen in C# sollen nicht doppelt vorkommen
ich habe dieses Programm: jetzt nur eine frage was muss ich noch schreiben das die Zufallszahlen nicht doppelt vorkommen
static void Main(string[] args)
{
{
int start = 0;
int[] zahlen = new int[6];
Random rnd = new Random();
for (start = 0; zahlen.Length > start; start++)
{
zahlen[start] = rnd.Next(0, 46);
}
Array.Sort(zahlen);
foreach (int i in zahlen) Console.Write(i + " ");
}
Console.ReadLine();
}
7 Antworten
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);
}
}
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.