C# random array?

4 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 
Fragesteller
 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;
}

//...

Mach zufallszahlen vor das for.

martin01034 
Fragesteller
 16.09.2018, 20:47

Wenn ich die Zufallszahlen vor das for mache wird die random zahl ja an jede stelle des Arrays plaziert und dann hab ich ja ein Array mit gleichen zahlen darum hab ich es in ein for reingepackt

0
Flummy1337  16.09.2018, 21:29
@martin01034

Nein hast du nicht, aber du erstellst das Objekt nur einmal und bist dadurch deutlich effizienter

0