Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-08-2006, 17:16   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Probleme beim Erzeugen eines Arrays der keine doppelten Elemente haben soll

Hallo zusammen,

ich möchte einen Array erstellen, der 3 Zahlen enthält. Jede Zahl darf aber nur einmal vorkommen, wobei die erste Zahl feststeht und die beiden anderen per Zufall generiert werden. Bei mir klappt es meistens, aber es kann vorkommen, dass die 2. und 3, Zahl gleich sind.

Hier mal mein Skript. Wahrscheinlich geht es viel schöner, ich bin also über jede Anregung dankbar.

PHP-Code:
maxSpalt 7;
drei = new Array();
drei.push(maxSpalt);    
erzeugeArray();


function 
erzeugeArray() {
    
zahl Math.round((Math.random()*9)+6);
    if(
drei.length 3){
        for(
i=0;i<=drei.length;i++){
            if(
zahl == drei[i]) {
                
erzeugeArray();
                break;
            } else {
                
drei.push(zahl);
            }
        }
    } else {
        
trace(drei[0]);
        
trace(drei[1]);
        
trace(drei[2]);
    } 

Danke und Grüße
Manni
mannimedia ist offline   Mit Zitat antworten
Alt 01-08-2006, 17:29   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Guckst du:
PHP-Code:
maxSpalt 7;
drei = new Array();
drei.push(maxSpalt);
function 
erzeugeArray() {
    while (
drei.length != 3) {
        
zahl != drei[0] && zahl != drei[1] ? drei.push(zahl) : zahl=Math.round((Math.random()*9)+6);
    }
    
trace(drei[0]);
    
trace(drei[1]);
    
trace(drei[2]);
}
erzeugeArray(); 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 01-08-2006, 17:37   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Klappt einwandfrei. Vielen Dank.

Nur was genau macht diese Zeile?

PHP-Code:
zahl != drei[0] && zahl != drei[1] ? drei.push(zahl) : zahl=Math.round((Math.random()*9)+6); 
Verstehe die Schreibweise nicht ganz.
mannimedia ist offline   Mit Zitat antworten
Alt 02-08-2006, 09:35   #4 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Das ist eine vereinfachte Schreibweise für eine if-Abfrage.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 02-08-2006, 09:47   #5 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
nicht ganz aber fast
Zitat:
?: conditional operator
expression1 ? expression2 : expression3

Instructs Flash to evaluate expression1, and if the value of expression1 is true, it returns the value of expression2; otherwise it returns the value of expression3.
grosster unterschied ist das du ein ruckgabe wert hast
und das es immer ein "if else" ist



und der beispiel ist ein beispiel fur unuberschaubaren code sonders gleichen !
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 02-08-2006, 10:00   #6 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
neben bei solte der code nicht mall functioniren !

Wen
nun Wen MM "&&" so umgestezt hete wie in der hilfe beschriben !


Zitat:
&& logical AND operator
expression1 && expression2

Performs a Boolean operation on the values of both expressions. If expression1 and expression2 are both true, then true is returned; otherwise, false is returned.
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 02-08-2006, 10:42   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Hallo.

dank schonmal für die Antworten. Bedeutet die obere Schreibweise jetzt das

PHP-Code:
while (drei.length != 3) {
        if (
zahl != drei[0] && zahl != drei[1]){
            
drei.push(zahl);
        } else {
            
zahl=Math.round((Math.random()*9)+6);
        }

Oder wie würde man das in der ausführlichen Schreibweise schreiben?
mannimedia ist offline   Mit Zitat antworten
Alt 02-08-2006, 10:58   #8 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Ja. So sähe es dann wohl mit if/else aus.

Zitat:
Zitat von Xeef
...und der beispiel ist ein beispiel fur unuberschaubaren code sonders gleichen !
Pffft...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 02-08-2006, 11:15   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Danke.

Muss mich erstmal an die Schreibweise gewöhnen. Bei der einfachereren blicke ich mehr durch. Ist wahrscheilich ein Gewohnheitsding.

LG
Manni
mannimedia ist offline   Mit Zitat antworten
Alt 02-08-2006, 11:18   #10 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
"Eigentlich" sollte man das auch so machen, wie du es jetzt hast.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 02-08-2006, 12:06   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
Das hört man gerne

Merci fürs helfen und erklären.
mannimedia ist offline   Mit Zitat antworten
Alt 02-08-2006, 22:49   #12 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
ActionScript:
  1. function erzeugeZufallsliste( laenge, startWert )
  2. {
  3.      var ergebnis = new Array();
  4.      ergebnis.push( startWert );
  5.  
  6.      while( ergebnis.length < laenge ){
  7.          var zufallszahl = Math.floor( Math.random() * 100);
  8.          if( ! finde( ergebnis, zufallszahl ))
  9.          {
  10.                ergebnis.push( zufallszahl );
  11.          }
  12.      }
  13.      return ergebnis;
  14. }
  15.  
  16. function finde( liste, wert )
  17. {
  18.     for( var i in liste) if( liste[i] == wert) return true;
  19.     return false;   
  20. }
  21.  
  22. var ergebnis = erzeugeZufallsliste( 3, 7 );
  23. trace( ergebnis );

Ungetestet, aber so grob sollte es klappen
mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (02-08-2006 um 22:51 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 03-08-2006, 19:49   #13 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
PHP-Code:
function getThreeRandomsFrom(){
    return 
arguments.sort(function(){return random(3)-1;}).slice(0,3);
}

threeRandoms getThreeRandomsFrom(7,8,9,10,11,12,13,14,15);
trace(threeRandoms); 
michael ist offline   Mit Zitat antworten
Alt 03-08-2006, 20:03   #14 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
woll schon auch was netes posten von wegen

aber denkste !

hazy fantazy's scheint die optimale losung zu sein !


ActionScript:
  1. function erzeugeZufallsliste(laenge, startWert) {
  2.     var ergebnis = new Array();
  3.     ergebnis.push(startWert);
  4.     while (ergebnis.length<laenge) {
  5.         var zufallszahl = Math.floor(Math.random()*10000);
  6.         if (!finde(ergebnis, zufallszahl)) {
  7.             ergebnis.push(zufallszahl);
  8.         }
  9.     }
  10.     return ergebnis;
  11. }
  12. function finde(liste, wert) {
  13.     for (var i in liste) {
  14.         if (liste[i] == wert) {
  15.             return true;
  16.         }
  17.     }
  18.     return false;
  19. }
  20. T = getTimer();
  21. var ergebnis = erzeugeZufallsliste(1000, 7);
  22. trace(getTimer()-T);
  23. ///
  24. ///
  25. T = getTimer();
  26. A = [];
  27. for (a=0; a<10000; a++) {
  28.     A[a] = a;
  29. }
  30. trace(getTimer()-T);
  31. T = getTimer();
  32. A.sort(function () {
  33.     return random(3)-1;
  34. }).slice(0, 1000);
  35. //
  36. trace(getTimer()-T);

auch mit "splice" ist es nicht besser !

alerdings hat hazy fantazy's
hier ein problem (scheint aber immer noch acceptabel zu sein was mich ver wundert !)

100 zahlen random aus 0-101
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef 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 02:38 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele