Zufallszahlen Array in C#?

4 Antworten

Wenn die Bedinung Deines "if"s innerhalb der for-Schleife nicht erfüllt wird, wird der entsprechende Platz im Array nicht gefüllt. Der Platz bleibt also auf dem ursprünglichen Wert, und das könnte dann die "0" sein.

JanineG90 
Fragesteller
 20.10.2019, 16:41

hmm das könnte sein, also muss man eher eine Endlosschleife mit Abbruchbedingung definieren bis das arrayneu[] voll ist?

0
oelbart  20.10.2019, 16:43
@JanineG90

Kommt jetzt ein bisschen drauf an, wie Du rausfinden willst, ob das Array voll ist, aber prinzipiell bist Du auf dem richtigen Weg ;)

1
Mein Code enthielt mehrfach die Zahl 0 (...)

Mit 0 werden die Array-Elemente initialisiert, so lange sie unbesetzt sind.

(...) wo ich die Zahlen 1 bis 20 zufällig verteilt (...) in ein Array speichern soll.

Ist es unbedingt notwendig, die Zahlen via Random zu ermitteln? Du musst doch jedesmal eine neue Zahl generieren lassen, wenn diese schon im Array existiert. Mit Abnahme der möglichen Zahlen, die noch gesetzt werden können, steigert sich der Aufwand.

Ein viel einfacherer Ansatz wäre es doch, erst die Zahlen in das Array zu legen und dieses dann zu mischen. Ein ziemlich einfacher Ansatz mit Linq:

OrderBy(_ => Guid.NewGuid())
JanineG90 
Fragesteller
 20.10.2019, 17:03

das ist natürlich ein viel besserer & performanter Ansatz, vielen lieben Dank :-) ich muss mal prüfen ob Linq genutzt werden kann, als Einsteiger habe ich mich bislang an den Basis Funktionen versucht, ich schau mal

0
regex9  20.10.2019, 17:38
@JanineG90

Auch ohne Linq kannst du mit einer Schleife und einem Zufallswert die Liste zufällig sortieren. Du gehst einfach durch das schon gefüllte Array, und lässt dir bei jedem Schritt einen Zufallsindex generieren. Das aktuelle Element vertauscht du dann mit dem Element am Zufallsindex.

0

das new Random() habe ich extra vor der for Schleife angegeben wie ich hier im Portal recherchiert hatte - entschuldigung der Code wurde wurde anscheint etwas zerpflückt, bearbeiten kann ich ihn leider nicht mehr

Du überschreibst die Zahlen in deinem Array ja sowieso, also ist egal, was da vorher drinnen stand. Wenn diese Bedingung für das IF-Statement einmal nicht erfüllt ist, dann wird der defaut-Wert von int, nämlich 0, so stehen gelassen. Das ist genau dann der Fall, wenn bereits eine Zahl, die zufällig ermittelt wurde, in dem Array steht und du nun nicht die gleiche Zahl noch einmal eintragen möchtest.

Aus dem IF-Statement schließe ich, dass du einen Array mit Zufallszahlen genau von 1 bis 20 haben möchtest. Es bietet sich da an, diese Zahlen nicht zufällig zu ermitteln, sondern bei der Deklaration direkt in den Array zu schreiben:

int[] zufallszahlen = new int[]{1, 2, 3, /* ... */, 20}

und dann lediglich die Elemente in dem Array durcheinander zu sortieren.

Es bietet sich daher dann an dieser Stelle eine List<int> statt einem int[] an, weil dort die Elemente nicht so "fest verschweißt" sind wie bei einem Array. Dadurch kann man auch ganz leicht die zufälligen Zahlen durcheinander sortieren, siehe auch den Beitrag hier: Randomize a List<T>.

JanineG90 
Fragesteller
 20.10.2019, 19:02

sehr interessant diese Vorgehensweise, mit List<int> habe ich mich noch nicht beschäftigt gehabt, vielen Dank für den Input :-)

0