Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Losowanie liczby z warunkiem
Forum PHP.pl > Forum > Przedszkole
Gość
[JAVASCRIPT] pobierz, plaintext
  1. Math.floor(Math.random()*321)
[JAVASCRIPT] pobierz, plaintext
to wysoluje liczby z zakresu 1-321.. a jak dodać do tego warunek, by losowało liczby jedynie podzielne przez 16?
markonix
Proponuje pętlę while + modulo.
Piogola
Wylosuj liczbę od 1 do 20 i pomnóż ją przez 16
croc
Ciekawe pytanie. Ogólnie liczbę losową z zakresu <min, max> można wylosować tak:

[JAVASCRIPT] pobierz, plaintext
  1. function random(min, max) {
  2. return Math.floor(Math.random() * (max - min + 1)) + min;
  3. }
[JAVASCRIPT] pobierz, plaintext


Musiałbyś sprawdzić ile jest liczb podzielnych przez daną liczbę w wybranym zakresie, odpowiednio zmniejszyć zakres losowania na 0 - k, gdzie k to ilość tych liczb i potem przemnożyć przez ten dzielnik. Trochę zabawy, ale można to zrobić spokojnie w jednej linijce I BEZ ŻADNYCH WHILE.
wita
Rand() i time()
croc
Cytat(wita @ 4.12.2011, 00:25:29 ) *
Rand() i time()

Ktoś tu chyba popił tongue.gif
Gość
ogólnie zrobiłem to tak:
[JAVASCRIPT] pobierz, plaintext
  1. var p;
  2. for(x=1,y=0; x<=320; x=x+16,y++) p[y] = x;
  3. alert( p[Math.floor(Math.random()*p.length)] );
[JAVASCRIPT] pobierz, plaintext

nie wiem czy optymalne, ale nic lepszego niż phpowe array_rand nie przyszło mi do głowy

a co do while+modulo, kombinowałem z tym przed napisaniem tematu i nic z tego
Gość
jeszcze tam z poprawką przy deklaracji x=0 a nie 1
croc
Stworzyłem coś takiego na szybko, ale nie wiem czy działa w 100% no i raczej też nie optymalnie, choć dużo lepiej:
[JAVASCRIPT] pobierz, plaintext
  1. function randomDivider(min, max, divider) {
  2. return (Math.floor(Math.random() * (Math.floor(max / divider) - Math.ceil(min / divider) + 1)) + Math.ceil(min / divider)) * divider;
  3. }
[JAVASCRIPT] pobierz, plaintext
Gość
na pierwszy rzut oka działa idealnie ohno-smiley.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.