C# random array?

3 Antworten

Die Lösung wurde dir schon genannt, hier nur nochmals eine Erklärung zu dem vorliegenden Verhalten:

Die Generation von Zufallszahlen (bzw. dessen Startwert) erfolgt bei dieser Klasse anhand der Zeit. Du erstellst pro Iteration ein neues Random-Objekt und dieses berechnet aufgrund des geringen zeitlichen Abstands zwischen den einzelnen Iterationen stets eine gleiche Zufallszahl.

Wenn du die Initialisierung des Objekts vor die Schleife schiebst, wird es nur einmal generiert und berechnet auch nur basierend auf einem Startwert immer neue Zahlen.


martin01034 
Beitragsersteller
 16.09.2018, 20:52

Achso danke

0

Bin mir nicht ganz sicher, aber könnte es sein das dein Array immer nur 0en hat?

Versuch mal das Array nach dem Methoden-Aufruf wieder in das Array zu speichern, also so:

static void Main(string[] args)
{
int[] arr = new int[6];
arr = RandomArray(arr);
....
}

Das müsste glaube ich die Lösung für dein Problem sein :)

Woher ich das weiß:Studium / Ausbildung

Aus offiziellen Informationen hier: https://docs.microsoft.com/en-us/dotnet/api/system.random#avoiding-multiple-instantiations

Initializing two random number generators in a tight loop or in rapid succession creates two random number generators that can produce identical sequences of random numbers. (...)

Damit das nicht passiert, musst du die Erstellung von zufallszahlen aus der Schleife rausziehen:

//...

Random zufallszahlen = new Random();
for (int i = 0; i < arr.Length; i++)
{
    int zahl = zufallszahlen.Next(1, 45);
    arr[i] = zahl;
}

//...