C# Random komische Ausgabe

Suprimos

Lieutenant
Registriert
Sep. 2009
Beiträge
516
hallo,
habe die aufgabe einen array mit zufälligen positiven sowie negativen werten zu füllen...
um negative randoms zu erzeugen, habe ich die random funktion mit einer "range" genommen...also random von einer zahl zwischen -15 und 15

Problem ist, wenn ich mir denn array mal ausgeben lasse, kommt sowas wie:
-6,-6,-6,-6,0,7
-1,1,2,2,2,0,7
5,-12,-12,-12,0,7
da sind sehr viele doppelte werte dabei...
ist das leider immer so?...oder hab ich da was falsch?


habe das hier bisher geschrieben:
Code:
	public static int[] Zufall (int n)

		{
		int [] arrayz = new int [n];
		for(int i=0; i < n-1;i++)
			{
			Random RandNum = new Random();
			int num = RandNum.Next(-15, 15);
			arrayz[i]=num;
			}
			return arrayz; 
		}
 
Code:
int num = RandNum.Next(0, 30);
arrayz[i]=num - 30;
Klappt dieser Ansatz besser?

edit: Wie im Link hierdrüber gesagt, was soll die Initialisierung in der for-Schleife? So erstellst du unnötig viele Random-Objekte, was unnötige Rechenzeit benötigt und wie du siehst zu schlechten Ergebnissen führt. Initialisierung in einer Schleife macht bei so etwas keinen Sinn, nur wenn es wirklich jedes Mal neu initialisiert werden soll.
 
Zuletzt bearbeitet:
Code:
public static int[] Zufall (int n)
{
	int [] arrayz = new int [n];
	Random RandNum = new Random();
	for(int i=0; i < n-1;i++)
	{
			
		int num = RandNum.Next(-15, 15);
		arrayz[i]=num;
	}
	return arrayz; 
}

Teste es mal so
 
Das Problem liegt in dem Seed für das Random.

Für pseudo Zufallswerte benutzen alle Algorithmen immer einen so genannten seed, aus dem sie alle "Zufallswert" berechnen.

Der Sinn oder Unsinn darin besteht das man bei einem gleichen seed immer die gleichen Ergebnisse bekommt.

Wen du nun jedesmal ein neues Random Object machst startet das immer wieder mit dem gleichen seed und das bedeutet das viele doppel kommen. Es sind jedoch nicht alle gleich, da der Standardseed zeitabhängig ist.

Änderst du den code nun so um, das du immer das gleiche object hast, wirst du keine doppelten mehr haben (oder halt nur ihrer Wahrscheinlichkeit entsprechend).

Code:
public static int[] Zufall (int n)

		{
		int [] arrayz = new int [n];
		Random RandNum = new Random();
		for(int i=0; i < n-1;i++)
			{
			int num = RandNum.Next(-15, 15);
			arrayz[i]=num;
			}
			return arrayz; 
		}
 
danke @ BangerzZ für die erklärung..
ist ja eigentlich auch logisch, ich muss random vor der schleife initialisieren
habe es eben getestet und es klappt super
 
Zurück
Oben