# Randomisierung einer Liste: Ziehen ohne Zurücklegen



## Lindchen (2. Jul 2010)

Liebe Nutzer,

ich versuche gerade für ein verhaltenswissenschaftliches Experiment mit Java eine Zufallsziehung ohne Zurücklegen zu programmieren - bin aber leider nicht erfolgreich, da ich kaum über Programmierkenntnisse verfüge (bin Psychologin). Ich wäre Euch deshalb sehr dankbar, wenn mir einer von Euch helfen könnte...
Folgendes möchte ich tun:
Ich habe vier Bilder und möchte diese Bilder in eine zufällige Reihenfolge bringen. Keines der Bilder soll sich wiederholen (also Ziehen ohne Zurücklegen). Folgenden Ansatz habe ich bereits (bitte nicht lachen, ich habe wirklich überhaupt keine Ahnung), der Code ist aber anscheinend noch unvollständig, es funktioniert so nämlich nicht:

(...)

<script type="text/javascript">

int a, b, c, d;
a = (int)(Math.random()*3+1);
do {
b = (int)(Math.random()*3+1);
} while (b == a);
do {
c = (int)(Math.random()*3+1);
} while (c == a || c == b);
do {
d = (int)(Math.random()*3+1);
} while (d == a || d == b || d == c);

bild1 = "p"+ a;
bild2 = "p"+ b;
bild3 = "p"+ c;
bild4 = "p"+ d;

document.getElementById("bild1").value = bild1;
document.getElementById("bild2").value = bild2;
document.getElementById("bild3").value = bild3;
document.getElementById("bild4").value = bild4;

</script> 

Die Bilder heissen bei mir p1, p2, p3 und p4 - um auf die Bilder zuzugreifen, setze ich deshalb die Variablennamen zusammen aus "p" und den Zufallszahlen.

Kann mir jemand sagen, was ich machen muss?

Ihr würdet mir sehr weiterhelfen!!!


Lindchen


----------



## Final_Striker (2. Jul 2010)

java ist nicht javascript. ;-)

http://www.java-forum.org/fuer-verirrte-fragen-javascript/15912-falschen-forum.html


----------



## Lindchen (2. Jul 2010)

Ups, womit ich wohl endgültig bewiesen habe, dass ich überhaupt keine Ahnung habe!! Danke für den Hinweis!


----------



## faetzminator (2. Jul 2010)

ich würde es so machen (kA ob das so läuft, ungetestet --> evtl. hilft undefined nicht):

```
var data = new Array(1, 2, 3, 4);
var shuffledData = new Array();
var len = data.length;
for (var i = 0; i < len; i++) {
    var index = parseInt(Math.random() * data.length);
    shuffledData[i] = data[index];
    for (var j = index; j < data.length - 1; j++) {
        data[j] = data[j + 1];
    }
    data[data.length - 1] = undefined; // ka ob man so oder evtl mit null die array-grösse verringern kann
}
// nun ist in shuffledData alles zufällig
```


----------



## kay73 (2. Jul 2010)

Standard-Algorithmus ist ein Fisher-Yates-Shuffle. Hier in JavaScript:
Randomize arrays in JavaScript with the Fisher-Yates shuffle algorithm

```
function fisherYates ( myArray ) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
}
```


----------



## faetzminator (3. Jul 2010)

Hab ich mir zuerst auch gedacht, allerdings dachte ich mir, dass dies bei vier Einträgen weniger Sinn macht - ist aber bei genauerem Überlegen wohl nicht logisch.


----------

