Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
03.12.2002, 13:24
Ornest



Ja, schon wieder ich :)

Also, ich habe eine Frage und zwar was ist an diesem Code Evil?
Irgendwas muss ja ziemlich Evil sein ...

Quellcode:
<?PHP

    class Test {
        var $nummer;
        
        function Test() {
            $this->nummer = array(5);
            
            for($i = 0; $i <= count($this->nummer); $i++) {
                $wert = mt_rand(0, 10);
                
                $this->nummer[$i] = $wert;
            }
        }
    }
    
    $test = new Test();

?>

Irgendwas stimmt mit der For-Schleife nicht, soweit bin ich auch gekommen.
Bei mir will er die Seite einfach nicht laden ... d.h. er lädt und lädt ...

P.S.: Irgendwas ist auch an lädt evil, oder ist das so richtig geschrieben O_o

--


Dieser Beitrag wurde am 03.12.2002 um 13:26 von Ornest bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
03.12.2002, 14:12
Andy_



Ähm, wie soll das auch aufhören, du setzt eine 5 an die erste Index stelle (0) des Arrays, dann setzt du in der for schleife immer ein neues Element in das Array, bzw. überschreibt es. Jedenfalls machts keinen Sinn, vielleicht erklärst du dein Ziel mal etwas einleuchtender.

Wenn du mit $this->nummer = array(5); wie in manch anderen Programmiersprachen ein Limit setzen wolltest, PHP ist was Speicher anbelangt jedoch ziehmlich freizügig, du setzt nur einen Integer auf den ersten Freien Index des Arrays.

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
002
03.12.2002, 15:40
Ornest



Ich will einfach einen Array mit 5 Elementen (für jedes Objekt) erzeugen ohne

Quellcode:
$this->nummer[0] = mt_rand(0, 10);
$this->nummer[1] = mt_rand(0, 10);
$this->nummer[2] = mt_rand(0, 10);
$this->nummer[3] = mt_rand(0, 10);
$this->nummer[4] = mt_rand(0, 10);

schreiben zu müssen. Ich will, dass die For-Schleife mir das halt abnimmt.
Ich glaube ich hab da irgendwie was falsch verstanden O_o

Arx, kann das sein dass man das garnicht so macht mein Lieber Herr Ornest? Grrr, wo habe ich das nur her?

--


Dieser Beitrag wurde am 03.12.2002 um 15:59 von Ornest bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
03.12.2002, 17:14
Fraghunter



hallo?
Du bist hier nicht bei C ;-)
hat sich was mit dem definieren und dimensionieren (und was es da noch alles giebt :D) von Arrays.
Ich will das mal ausführlich erläutern:
Quellcode:
<?PHP
    class Test {
        var $nummer;
        function Test() {
            $this->nummer = array(5);
                 // das erstellt ein array mit einem Element, und zwar:
                    // nummer[0] = 5;
            for($i = 0; $i <= count($this->nummer); $i++) {
                $wert = mt_rand(0, 10);
                $this->nummer[$i] = $wert;
            }
              //diese Schleife wird folgendes machen:
              //1.   $i=0, 0 <= 1 (Anzahl der Elemente des Arrays) - true, also Ausführen.
                   $this->nummer[0] = mt_rand(0, 10); //leicht gekützt, sonst wird der Post so lange ;-)
              //2. ++$i=1, 1 <= 1   -  true, weiter gehts
                   $this->nummer[1] = mt_rand(0, 10); //unser Array hat jetzt 2 Elemente:
                                                         //nummer[0], nummer[1]  /\
                                                         //                      ||
              //3. ++$i=2, 2 <= 2   -  true (------------------------------------++)
                   $this->nummer[2] = mt_rand(0, 10); //unser Array hat jetzt 3 Elemente:
                                                         //nummer[0], nummer[1], nummer[2]
                                                        
              //4. Und so weiter...
        }
    }
    
    $test = new Test();

?>

So, du siehst - selbst wenn array(5); geklappt hätte, wäre das nichts geworden.
Wie gehts richtig?
so:

Quellcode:
<?PHP
    class Test {
        var $nummer;
        function Test() {
            while ($i++ <= 5) {
                mt_srand((double)microtime()*1000000);
                $this->nummer[$i] = mt_rand(0, 10);
                //1. srand liefert besere Zufallszahlen
                //2. jedesmal neuen Startwert festlegen - sollte besserer Zufallsgenerator sein,
                //   als wenn du den nur einmal festlegst.
                //3. while ist schneller ;-)
            }
        }
    }
    $test = new Test();
?>

Hoffe ich konnte dir helfen.
Du solltest dir aber angewöhnen immer vor der Benutzung eines Befehls, den du nicht genau in php kennst, auf der php Website nachzuschauen.
Das geht ziemlich schnell, wenn du dir das richtig eingerichtet hast, und php hat einfach die beste hp und referenz, die es giebt.
http://www.php3.de/tips (php3.de ist ein Mirror in deutschland von php.net - einfach nur schneller, sonst ist alles gleich.)
schau da mal.
besonders der "Adding the Quick Reference to Internet Explorer 5" ist super (geht auch mit dem 6er)

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
004
03.12.2002, 17:22
Ornest



Jaaaa, das wars, danke ;)
btw. nich C sondern Java :)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
03.12.2002, 17:38
CN



Zitat:
//3. while ist schneller ;-)
w00t?
die sollten fast gleichschnell sein es ist doch nur ne andre syntax

--


Dieser Beitrag wurde am 03.12.2002 um 17:40 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
03.12.2002, 18:26
Fraghunter



ja, fast gleichschnell, allerdings ist while etwas schneller.
Und vor allem hab ich die Erfahrung gemacht, dass die Leute hinterher eine viel bessere Lösung finden, wenn sie versuchen while schleifen zu nutzen.

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
007
03.12.2002, 18:40
CN



naja ich hab ein und dasselbe script geschrieben
einmal mit while und einmal mit for, das bis 10^6 hochzählt
mit while hats 55 und mit for 54 sec gedauert das auszuführen .. also
dann wäre while ca 0,02% schneller
sobei ich den genauen zeitwert nich mehr hab..
aber das is extrem wenig

--

zum Seitenanfang zum Seitenende Profil || Suche