Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-03-2006, 17:14   #1 (permalink)
Neuer User
 
Benutzerbild von _Max_
 
Registriert seit: May 2003
Beiträge: 2.475
arrays per random raussuchen und gucken ob doppelt

hey leute.

hab jetzt den ganzen tag rumprobiert und wollte mal was alleine in AS machen..
klappt aber net so

also was ich machen will :

ich hab ein array mit 5 namen :
PHP-Code:
var namen = ['Hammes','Melzer','Peters','Hütten'
aus diesem array möchte ich per random einen namen raussuchen :
PHP-Code:
var namen = ['Hammes''Melzer''Peters''Hütten'];
zufall random(4);
trace(namen[zufall]) 
so,dass klappt ja super. aber ich möchte jetzt gleich aufeinmal 3 namen
per random raussuchen,und da kann es ja mal sein,dass er mir einen
doppelt anzeigt. wie kann ich das verhindern?
habe es so in etwa versucht :
PHP-Code:
var namen = ['Hammes','Melzer','Peters','Hütten']
var 
doppelt = new Array();
while (
doppelt.length != 3) {
    
zufall random(4);
    
doppelt[] = zufall;
    if() {
    }

eigentlich recht einfach was ich mir gedacht habe :
so lange im array doppelt net 3 elemte gespeichert sind soll er per random
ein namen aus dem namen array laden. diesen index soll er im doppelt array
speichern und zwar beim ersten namen an doppelt[0],den zweiten namen an
doppelt[1] usw.
gleichzeitig soll er aber noch gucken ob der mit random ausgegebene index
schon im doppelt array drinne ist,dann weiss ich ja ,dass der name schon
ausgesucht wurde,ist das der fall,dass der index schon drin ist,dann soll er
nochmal nen neuen auswählen.

puuhh,aber ich bekomms net so hin,hoffe einer hat es GANZ GELESEN und weiss rat

danke !
__________________
!!! www.verblitzt.de !!!
_Max_ ist offline   Mit Zitat antworten
Alt 03-03-2006, 17:57   #2 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Wo sind da 5 Namen!?
PHP-Code:
var arrNamen = new Array('Hammes''Melzer''Peters''Hütten');
var 
arrChosen = new Array();
function 
chooseThree() {
    if (
arrChosen.length<3) {
        
trace("Länge: "+arrNamen.length)
        var 
zufall Math.round(Math.random()*(arrNamen.length-1));
        
trace("Zufall: "+zufall);
        if (!
in_array(arrNamen[zufall], arrChosen)) {
            
arrChosen.push(arrNamen[zufall]);
        }
        
chooseThree();
    } else {
        
trace(arrChosen);
        return;
    }
}
function 
in_array(needlehaystack) {
    for (var 
0i<haystack.lengthi++) {
        if (
haystack[i] == needle) {
            return 
true;
        }
    }
    return 
false;
}
chooseThree(); 
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 03-03-2006, 18:02   #3 (permalink)
Neuer User
 
Benutzerbild von _Max_
 
Registriert seit: May 2003
Beiträge: 2.475
genau das was ich will,aber der sinn der sache ist ja,dass ich es auch verstehe

kannste vllt son bissel deinen code erläutern ?
__________________
!!! www.verblitzt.de !!!
_Max_ ist offline   Mit Zitat antworten
Alt 03-03-2006, 18:27   #4 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
PHP-Code:
var arrNamen = new Array('Hammes''Melzer''Peters''Hütten');
var 
arrChosen = new Array(); 
...dürfte klar sein... Erstellen von Quell- und Zielarray.
PHP-Code:
function chooseThree() {
    if (
arrChosen.length<3) {
        var 
zufall Math.round(Math.random()*(arrNamen.length-1));
        if (!
in_array(arrNamen[zufall], arrChosen)) {
            
arrChosen.push(arrNamen[zufall]);
        }
        
chooseThree();
    } else {
        
trace(arrChosen);
        return;
    }

Das ist unsere Hauptfunktion, die wir einmal aufrufen. Als erstes überprüfen wir, ob schon 3 Werte im Zielarray liegen.
PHP-Code:
if (arrChosen.length<3) { 
Wenn die Länge grösser ist als "kleiner 3" (sprich: 0, 1 oder 2), dann führe den else-Teil aus:
PHP-Code:
trace(arrChosen);
return; 
Nämlich: Gib uns das Array aus und dann beende die Funktion (return).

Ist allerdings die Bedingung erfüllt, heisst, die Länge ist kleiner 3, dann wird der obere Teil ausgeführt. Zuerst erstellen wir uns eine Zufallsvariable:
PHP-Code:
var zufall Math.round(Math.random()*(arrNamen.length-1)); 
Und zwar soll die den gerundeten (Math.round) Wert von Math.random mal der Länge minus 1 des Quellarrays enthalten. Zur Erklärung:
Um ein Element des Arrays ansprechen zu können, brauchen wir eine Zahl, zwischen 0 und der Anzahl Elemente des Arrays, minus 1. (Ein Array fängt bei 0 an zu zählen, der erste Wert hat dann den Index 0, das n-te Element hat den Index n-1.) Math.random liefert uns einen Wert zwischen 0 und 1 (Mit Fliesskomma!). Diesen multiplizieren wir mit nun mit der Indexzahl (length-1). Wir erhalten nun irgend nen Wert zwischen 0 und Maximalindex n-1. Das Problem hierbei ist, dass der Wert auf Grund der Fliesskommazahl aus Math.random beliebig viele Stellen nach dem Komma aufweisen kann. Darum runden wir das Ganze ab. Somit erhalten wir einen ganzzahligen Wert zwischen 0 und n-1 (im Beispiel also 3, da 4 Elemente).
Die Array-Abfrage mit dem Index dürfte klar sein... Allerdings müssen wir jetzt überprüfen, ob der Wert bereits gewählt wurde:
PHP-Code:
if (!in_array(arrNamen[zufall], arrChosen)) { 
Dazu sehen wir uns mal die Funktion in_array genauer an:
PHP-Code:
function in_array(needlehaystack) {
    for (var 
0i<haystack.lengthi++) {
        if (
haystack[i] == needle) {
            return 
true;
        }
    }
    return 
false;

Wir haben zwei Parameter: "needle" und "haystack". Da haystack ein Array ist (oder sein sollte) müssen wir alle Elemente durchgehen, da ja jedes den gesuchten Wert enthalten kann. Wir durchlaufen also das gesamte Array mit einer for-Schleife und geben im Falle eines Fundes
PHP-Code:
if(haystack[i] == needle
per return "true" zurück. Ein return hat zur Folge, dass die aufrufende Funktin per sofort unterbrochen wird und im Falle eines Wertes (hier true) diesen entsprechen zurückgibt. Nach der For-Schleife (an diesen Punkt kommen wir nur, wenn die Schleife nicht durch ein return true unterbrochen wurde, also der Wert nicht gefunden wurde!) geben wir "false" per return zurück. Das heisst, die Funktion liefert uns "true" wenn der Wert vorhanden ist, bzw. "false", wenn dies nicht der Fall ist.

Zurück zu unserer Zufallsüberprüfung:
PHP-Code:
if (!in_array(arrNamen[zufall], arrChosen)) { 
Wir erhalten also für die in_array-Funktion entweder true oder false als Rückgabewert, wenn wir den Zufallswert (arrNamen[zufall]) und das Zielarray (arrChosen) als Parameter übergeben. Eine if-Abfrage überprüft immer auf den Wert "true" oder "false" (Bsp: i < 3 wird auch "true" zurückgeben, wenn i kleiner als 3 ist...). Das heisst, wenn der Wert gefunden wird, erhalten wir als Rückgabewert "true". Da wir den Wert aber nur wollen, wenn wir "false" erhalten (er also noch nicht vorhanden ist), kehren wir die Ausgabe der Funktion mit Hilfe eines vorangestellten "!" um, so wird aus "true" "false" und umgekehrt. Ist also der Wert nicht enthalten, wird der Wert dem Array hinzugefügt:
PHP-Code:
arrChosen.push(arrNamen[zufall]); 
Danach rufen wir so oder so nocheinmal chooseThree aus. Sollte gerade der 3. Wert eingetragen worden sein, wird die if-Abfrage am Anfang das merken und automatisch tracen und dann per return die Funktion beenden. Wurde nicht der 3. Wert eingetragen, wird das ganze so lange ausgeführt, bis ein Wert gefunden wurde, der noch nicht im Zielarray existiert und die Anzahl Elemente nicht grösser als 3 ist.

Jetzt müssen wir das ganze nur noch starten, nämlich indem wir die Funktion aufrufen:
PHP-Code:
chooseThree(); 
So - hoffe, das war ausführlich genug erklärt!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 03-03-2006, 18:33   #5 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
ich war mal so frei
PHP-Code:
var arrNamen = new Array('Hammes''Melzer''Peters''Hütten');
//das is dein array
var arrChosen = new Array();
//das ist das temporäre array
function chooseThree() {
    
//das ist die raussscuh funktion
    
if (arrChosen.length<3) {
        
//es sollen 3 rausgesucht werden  (smacht man eigentlich dynamisch :) )
        
trace("Länge: "+arrNamen.length);
        var 
zufall Math.round(Math.random()*(arrNamen.length-1));
        
//hier gehts ans raussuchen
        
trace("Zufall: "+zufall);
        if (!
in_array(arrNamen[zufall], arrChosen)) {
            
//coole schreibweise: soll heissen 
            // wenn der wert Nicht im array ist schreibe ihn rein
            
arrChosen.push(arrNamen[zufall]);
        }
        
chooseThree();
        
//ruft die function in sicher selber wider auf   -  war mir neu, dass das geht 
    
} else {
        
//ausgabe
        
trace(arrChosen);
        return;
    }
}
/* das brach kein mensch 
function in_array(needle, haystack) {
for (var i = 0; i<haystack.length; i++) {
if (haystack[i] == needle) {
return true;
}
}
return false;
}*/
chooseThree(); 
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 03-03-2006, 21:03   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
von mir nur ein kleiner beitrag:
Code:
var namen = ['Hammes','Melzer','Peters','Hütten'] ;
namen.sort(function(){return random(3)-1;});
var i=3; while (i--) {trace(namen[i]);}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 03-03-2006, 21:46   #7 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
Thumbs up

@hgseib sehr fein, gefällt mir gut
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 04-03-2006, 11:25   #8 (permalink)
Neuer User
 
Benutzerbild von _Max_
 
Registriert seit: May 2003
Beiträge: 2.475
thx so far,werde mir das mal in ruhe angucken
__________________
!!! www.verblitzt.de !!!
_Max_ ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele