allgemein: random(x....y) ohne bestimmte Zahl
Georg
- programmiertechnik
0 David Tibbe0 Siechfred0 Georg0 Thomas Meinike0 Carsten0 Georg
Hallo,
vom missglückten Topic versuche ich eine genauere Erklärung:
Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?
Beispiel: ich will eine Zufallszahl zwischen 1 und 100, aber es darf nicht die 50 sein.
Früher habe ich das umständlich über Schleifen und Abfragen gelöst.
Gerade kommt mir in den Sinn, zwei Random Abfragen zu machen, die die Bereiche links und rechts der zu vermeidenden Zahl abdecken.
Aber gibt's auch einen einfachen Formelweg dafür?
Ist nicht arg dringend, nur, im mich schlauer zu machen.
Danke für jedes Posting,
Grüße, Georg Neuhaus
Hallo
Aber gibt's auch einen einfachen Formelweg dafür?
Spontan würde mir einfallen: Lasse dir eine Zahl zwischen 1 und 99 generieren. Falls sie größer als 49 ist addierst du einfach 1 dazu.
Grüße
David
Hallo Georg.
Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?
Nimm eine Schleife mit der Abbruchbedingung, dass die innerhalb der Schleife erzeugte Zufallszahl nicht die ist, die du ausschließen willst.
Freundschaft!
Siechfred
Danke für Eure Tipps.
Bisher habe ich es auch so wie Siechfred gemacht, bin aber mit der Lösung nicht zufrieden, weil sie theoretisch elend lange dauern kann.
Hier ist meine bisherige Lösung, aber ich vermute, es gibt eine mathematisch geschickte:
// eine Zahl zwischen 0 und 99 erzeugen
// danach eine weitere Zahl zwischen 0 und 99, die aber
// nicht der ersten entsprechen darf
ersteZahl=random(100)
zahlenbereichTiefer=random(ersteZahl-1);
zahlenbereichHoeher=random(ersteZahl+1);
zahlenBereichAuswaehlen=random(2); // ergibt entweder 0 oder 1
// fuer einen der Zahlenbereiche entscheiden
if (zahlenBereichAuswaehlen==0){
zweiteZahl=zahlenbereichTiefer
}else{
zweiteZahl=zahlenbereichHoeher
}
--------------------------------
Das scheint mir zumindest eine gerechte Methode zu sein.
Noch irgendwelche Tipps?
Georg
Hallo,
Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?
Beispiel: ich will eine Zufallszahl zwischen 1 und 100, aber es darf nicht die 50 sein.
Versuch mit JavaScript nach dem Schema:
Zwei Zufallszahlen (von ... nicht-1 und nicht+1 ... bis) in ein Array legen und dann nochmals 0 bzw. 1 als Zufallswert bestimmen und das jeweilige Arrayelement zurueck geben.
function Zufallszahl(von,bis,nicht)
{
var z;
z=new Array(Math.round(von+(nicht-von-1)*Math.random()),Math.round(nicht+1+(bis-nicht-1)*Math.random()));
return z[Math.round(Math.random())];
}
Ich habe mal 1000 "Ziehungen" mit von=1, bis=100, nicht=50 ausgefuehrt, die 50 war nicht dabei, 1 und 100 durchaus.
MfG, Thomas
Hi Georg,
Wie kann ich eine Random Abfrage (allgemein, egal, ob JavaScript, PHP oder Flash, das lässt sich ja übertragen) generieren, die mir einen Zufallswert aus einer Spanne liefert und dabei einen bestimmten Wert ausschliesst?
Erzeuge ein Feld mit der Menge aller gewünschten Zahlen. (Bei dir also ein Feld mit 99 Elementen, dass die Zahlen 1-49 und 51-100 enthält.)
Aus diesem Feld greifst du jetzt einen zufälligen Wert raus.
Wenn du mehrere Werte die sich nicht wiederholen dürfen brauchst, kannst du das Feld auch zufällig umsortieren.
http://www.dclp-faq.de/q/q-code-zufallszahlen.html
Gruß,
Carsten
Hi,
zwei super Tipps, vor allem der konkrete Code sieht meiner neuesten Überlegung sehr ähnlich, vielen Dank für Eure Mühe!
Gruß,
Georg