kostenloser Webspace werbefrei: lima-city


Verschiedene nicht aufeinander folgende Zufallszahlen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo.

    Ich brauche eine Funktion, die mir eine bestimmte Anzahl an Zahlen in einem Array zurück gibt. Die Zahlen sollen alle unterschiedlich sein und die Zahlen sollen nicht aufeinander folgen. Also sollen die Zahlen 1 und 2 zum Beispiel nicht zusammen vorkommen. Ich habe bereits eine Funktion, die mir die bestimmte Anzahl an unterschiedlichen Zufallszahlen zurück gibt:

    function getRandoms($quant, $min, $max){
      $randary = array();
      while(!(count($randary) >= $quant || count($randary) > $max-$min))
        $randary[mt_rand($min,$max)] = true; // Zufallszahl in Key speichern
      return array_keys($randary);
    }


    Jetzt fehlt nur noch der Teil, der dafür sorgt, dass die Zahlen nicht aufeinander folgen dürfen. Ich komme leider nicht drauf, wie ich das umsetzen kann. Hat vielleicht jemand eine Idee, wie ich es machen kann?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Am Einfachsten merkst du dir die letzte Zahl, die du erzeugt hast, in einer Variablen und vergleichst die aktuelle Zahl mit dieser. Ist sie gleich → neue Zufallszahl, ansonsten ins Array einfügen und fortfahren.
  4. verbrechergame

    verbrechergame hat kostenlosen Webspace.

    Die Zahl sollte nicht nur nicht gleich sein, sondern auch um mindestens 2 Zahlen von der letzten abweichen.
    Die Zahl sollte also in einer Variable gespeichert werden und muss mit der nachfolgenden verrechnet werden.
    Zb könntest du die Bedingung einfügen, dass der Betrag der Differenz größer als 1 sein muss, damit schließt du dann auch den Fall aus zwei gleiche Zahlen zu bekommen.

    Beitrag zuletzt geändert: 30.5.2014 13:46:19 von verbrechergame
  5. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ich habe jetzt die Bedingung eingebaut, dass eine Zahl nur ins Array gespeichert werden soll, wenn die Zahl davor und die Zahl danach nicht existiert. Allerdings scheint es eine Endlosschleife zu geben, da die Seite nicht zuende lädt. Allerdings weiß ich auch nicht woran das jetzt liegt. Hier der Code:

    function getRandom($quant=1, $min=0, $max=1){
      $randary = array();
      while(!(count($randary) >= $quant || count($randary) > $max-$min)){
      	$rand = mt_rand($min,$max);
    	if(!isset($randary[$rand+1]) && !isset($randary[$rand-1])){
        	$randary[$rand] = true; // Zufallszahl in Key speichern
    	}
      }
      return array_keys($randary);
    }


    Weiß jemand weiter?

    EDIT: Klappt doch so. In meinem Fall wollte ich 31 Zahlen von 1 bis 64 haben und das hat dann nicht gepasst. Habe jetzt andere Werte verwendet und mit denen klappt es

    Beitrag zuletzt geändert: 30.5.2014 14:12:55 von ultimate-bravery
  6. Soll immer nur die letzte Zahl überprüft werden, oder sollen alle Zahlen stimmig sein? Weil sonst müsste man noch Prüfung einbauen, ob die gesuchte Anzahl überhaupt erreichbar ist.
  7. function getRandomIntArr($number, $min, $max)
    {
    	$result = array();
    	$count = 0;
    	
    	while((count($results) <= $number) && ($max - $min > count($results))
    	{
    		$rand = mt_rand($min, $max);
    		
    		if(($count == 0 || ($rand[$count - 1] != $rand - 1) && ($rand[$count - 1] != $rand + 1)) && (!in_array($rand, $result)))
    		{
    			$result[$count] = $rand;
    			$count++;
    		}
    	}
    }


    Beitrag zuletzt geändert: 30.5.2014 16:45:21 von drafed-map
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!