Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich möchte aus einem Array mit 80 Elementen zufällig jedes Element auswählen, aber es soll jedes nur einmal ausgewählt werden!
Soweit so gut..allerdings stell ich nun fest, dass gar nicht alle Elemente im "Ergebnis"-Array vorkommen..Ist wohl irgendwas mit dem Zufallsalgorithmus.
' schrieb:Ich möchte aus einem Array mit 80 Elementen zufällig jedes Element auswählen, aber es soll jedes nur einmal ausgewählt werden!
Ich rate, dass du den Algorithmus für die zufällige Auswahl und das Zusammenstellen des neuen Arrays nochmals überdenkst. Die zwei kleinen Änderungen bekommst du sicher auch noch selbst hin!
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Zitat:Bitte stell das nächste Mal deine Frage präziser.
Alles klar, mach ich!
Aber thx..hat funktioniert.
Allerdings verstehe ich nicht, warum das jetzt mit dem Zähler verbunden wurde. Die Streuung der Zufallszahlen wird also immer geringer oder wieso funktioniert das jetzt und bei meiner Version haben mir Zahlen gefehlt?
' schrieb:Allerdings verstehe ich nicht, warum das jetzt mit dem Zähler verbunden wurde. Die Streuung der Zufallszahlen wird also immer geringer oder wieso funktioniert das jetzt und bei meiner Version haben mir Zahlen gefehlt?
Es ist zwar richtig, dass die "Streuung der Zufallszahl" immer geringer wird. Aber: Die "Zufallszahl" ist nicht die Zahl, die du ziehen willst. Die "Zufallszahl" ist der Index im Array!
Das zufällige Ziehen geschieht dadurch, dass ein beliebiger Index im Array "gezogen" wird. Der Wert an der Stelle des Indices ist also die gezogene Zufallszahl. Und jetzt kommt es: Die Zahl wird aus dem Array gelöscht, sie kann somit kein zweites Mal gezogen werden - und das Array ist um eins kürzer geworden. Weil das Array jetzt um eins kürzer ist, muss natürlich der Bereich der Zufallszahl auch um eins kleiner werden. Weil: Zufallszahl = Index. Die Breite der Zufallszahl ergibt sich also aus der Länge des Arrays, also N-i.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Noch eins:
Wenn du die Breite der Zufallszahl nicht auf die Länge des aktuellen Arrays beschränkst, dann wird der Index größer als das Array lang ist. Folge: Liegt der Indexwert außerhalb der Arraygrenzen (die sind immer 0 .. len(Arr)-1), so wird der Standardwert des Basistyps des Array (hier I32), also Null, ausgegeben. Diese Nullen wolltest du eliminiert haben.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).