Bestimmte Zahlen in zufälliger Reihenfolge

Hi,

ich möchte ein Feld der Größe 50 mit den Zahlen von 1 bis 50 in zufälliger Reihenfolge befüllen. Die Schwierigkeit besteht darin, dass jede der Zahlen nur genau einmal vorkommen soll. Wenn ich mit einem Zufallszahlen-Generator arbeite, muss ich ja jede neue Zufallszahl mit allen bisher gefüllten Feldkomponenten vergleichen. Kann ich nicht irgendwie ein Feld mit den Zahlen von 1 bis 50 erzeugen und die Feldkomponenten durcheinanderwürfeln?

Liebe Grüße
Hugo

Moien

Nimm ein boolean-Feld der Länge 50. Setz alles auf true. Lass dir von Math.random einen counter zwischen 0 und 50 geben. Laufe das Array ab mit folgenden Regeln:

  • Feld true => counter dekrementieren und ein Feld weiter gehen
  • Feld false => eins weiter gehen
  • Array zu ende => zurück zum Anfang der Array
  • counter == 0 => Nummer des Feldes benutzen und das Feld auf false setzen. Neuen counter besorgen.

cu

Hallo pumpkin,

mit dem von Dir vorgeschlagenen Algorithmus erzeugst Du eine Reihenfoge von Zahlen, die nicht so ganz unabhängig ist, wie es bei einer Zufallsfolge sein sollte. Beispiel: Als erstes wählst Du die 25. Wenn Du als nächstes eine Zahl zwischen 0 und 25 wählst hast Du genauso wie bei 27 bis 49 die entsprechende Zahl gewählt. Bei 25 gehst Du weiter zur 26, die Du auch auswählst, wenn Du sie direkt triffst. Im zweiten Schritt ist also die 26 doppelt so wahrscheinlich wie jede der restlichen Zahlen.

Ich schlage daher folgendes vor. Nimm z.B. Eine ArrayList der Länge 50 und fülle sie mit den Zahlen von 1 bis 50. Nimm eine zweite leere Liste. Hole zufällig eine Zahl aus der ersten Liste und füge sie in der zweiten Liste hinten an. In der ersten Liste wird diese Zahl natürlich gelöscht. Das machst Du solange, bis die erste Liste leer ist.

Viele Grüße
Stefan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Du hast Recht, die Zufallszahl muss von 0 bis Anzahl-der-noch-Möglichen laufen.

cu

Hi pumpkin,

so „trifft“ man sich wieder. :smiley: Vielen Dank für deine Antwort!

Hmm, also mal versuchen … das ist der Anfang, wie geht’s weiter?

import java.util.Random;

public class zufall
{
 public static void main (String args)
 {
 boolean[] zufall=new zufall[50];
 int counter;

 for (int i=0;i

Liebe Grüße
Hugo


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Hi Stefan,

vielen Dank für deine Hilfe.

Hallo pumpkin,

mit dem von Dir vorgeschlagenen Algorithmus erzeugst Du eine
Reihenfoge von Zahlen, die nicht so ganz unabhängig ist, wie
es bei einer Zufallsfolge sein sollte. Beispiel: Als erstes
wählst Du die 25. Wenn Du als nächstes eine Zahl zwischen 0
und 25 wählst hast Du genauso wie bei 27 bis 49 die
entsprechende Zahl gewählt. Bei 25 gehst Du weiter zur 26, die
Du auch auswählst, wenn Du sie direkt triffst. Im zweiten
Schritt ist also die 26 doppelt so wahrscheinlich wie jede der
restlichen Zahlen.

So ganz verstehe ich das nicht. :frowning:

Ich schlage daher folgendes vor. Nimm z.B. Eine ArrayList der
Länge 50 und fülle sie mit den Zahlen von 1 bis 50. Nimm eine
zweite leere Liste. Hole zufällig eine Zahl aus der ersten
Liste und füge sie in der zweiten Liste hinten an. In der
ersten Liste wird diese Zahl natürlich gelöscht. Das machst Du
solange, bis die erste Liste leer ist.

So hatte ich mir das im Prinzip auch vorgesellt. Ich weiß aber leider nicht, wie ich es umsetzen soll. Wie funktioniert das mit der ArrayList und wie das zufällige Herausholen? Code wäre super. :smile:

Liebe Grüße
Hugo