rand() mit komischen verhalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • rand() mit komischen verhalten

    ähm was könnte das sein steh rad aufm schlauch. dachte ich könnte eine rand funktion bauen in der ich bestimmte zahlen beim randomize
    aussperren kann. in dem beispiel möchte ich eine zahl zwischen 1-10 aber nicht 3 und 8. das tolle ist das die fkt bei jedem xten aufrud gar nix zurückgibt?!? man teste selber und staune. wird mich zu sehr interessieren was da passiert!

    PHP-Code:

    function myRand($a)
    {
        
    $r rand(1,10);
        if(!
    in_array($r,$a)):
            return 
    $r;
        else:
            
    myRand($a);
        endif;
    }

    myRand(array(3,8)); 
    gruß

    fra*

  • #2
    Re: rand() mit komischen verhalten

    Original geschrieben von frank7l7
    das tolle ist das die fkt bei jedem xten aufrud gar nix zurückgibt?!?
    Natürlich, weil du ja nicht in jedem Fall ein Ergebnis zurückgibst.

    Du scheinst noch nicht verstanden zu haben, wie Rekursion funktioniert.


    Fall 1, erster Aufruf: rand() ergebe 2, die !in_array-Bedingung ergibt true, 2 wird zurückgegeben.

    Fall 2, erster Aufruf: rand ergebe 3, die !in_array-Bedingung ergibt false, also erfolgt der
    zweite Aufruf: rand ergebe 5, die !in_array-Bedingung ergibt true, also wird der Wert 5 an die darüberliegende Rekursionsebene zurückgegeben. Was geschieht auf dieser Ebene jetzt mit dem Wert 5? Überhaupt nichts, er wird nicht weiter "nach oben" zurückgegeben, sondern verpufft im Nirgendwo.


    Lösung: Im else-Zweig das Ergebnis des Aufrufes von myRand($a); ebenfalls mittels return zurückgeben lassen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      PHP-Code:
      function myRand($a,$e)
      {
          
      $r rand(1,10);
          if(!
      in_array($r,$a)):
              
      $e $r;
          else:
              
      myRand($a,&$e);
          endif;
      }

      myRand(array(3,8),&$e); 
      was würd ich ohne variablen referenz machen

      EDIT:

      @ wahsaga - ja ja habs gesehen 4 wochen im urlaub und ich raff schon wieder nix

      Zuletzt geändert von frank7l7; 26.01.2007, 15:54.

      Kommentar


      • #4
        OffTopic:
        Rekursion ist zwar was tolles, aber für sowas...
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          anderer vorschlag? nehm ich auch gern

          Kommentar


          • #6
            PHP-Code:
            function myRand($a) {
              do {
                
            $r rand(110);
              } while (
            in_array($r$a));
              return 
            $r;

            So zum Beispiel?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              tönt gut ... + ist resourcen schonender

              Kommentar


              • #8
                PHP-Code:
                function myRand($a)
                 {
                  
                $rands=range(110);
                  
                shuffle($rands);
                  foreach(
                $rands as $r)
                   if(!
                in_array($r$a))
                    return 
                $r;
                  return 
                false;
                 } 
                kann man sogar mit myRand(range(1, 10)); aufrufen

                Kommentar


                • #9
                  ok, hab auch einen vorschlag:

                  Code:
                  function myrand( auszuschließendes_array )
                  {
                     mein_array = {1,...,10} ohne auszuschließendes_array
                  
                     return zufälliges_element_von( mein_array )   
                  }
                  implementierungstipps:

                  range()
                  array_diff()
                  array_rand()

                  Kommentar


                  • #10
                    Original geschrieben von penizillin
                    ok, hab auch einen vorschlag:
                    ich bekomme dabei einen parse error.

                    Kommentar


                    • #11
                      Original geschrieben von 3DMax
                      ich bekomme dabei einen parse error.
                      ach nein...

                      kennst du den begriff pseudocode?
                      Freedom is a state of mind. Not a state in which we live.

                      troxdev.ch | animefieber

                      Kommentar


                      • #12
                        Original geschrieben von TroX
                        kennst du den begriff pseudocode?
                        nein. kannst du mir das erklären?

                        Kommentar


                        • #13
                          http://de.wikipedia.org/wiki/Pseudocode
                          Freedom is a state of mind. Not a state in which we live.

                          troxdev.ch | animefieber

                          Kommentar

                          Lädt...
                          X