Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Losowa liczba z wykluczeniem wybranych liczb
Forum PHP.pl > Forum > Przedszkole
zimix
Witam
Mam problem, nie moge sobie poradzic wykonac instrukcji do wygenerowania losowej liczby z wykluczeniem wybranych liczb.
Znam ideea nie moge jej zastosowac. Trzeba jakos sporzadzic instrukcje sprawdzajaca czy wylosowana liczba nie jest np. elementem tablicy wykluczonych liczb po czym jesli nie jest to ok jesli jest to nastepuje kolejne losowanie az do skutku... Jak to zapisac?

Moje aktualne wypociny (dzialaja jedynie gdy w tablicy "c" jest jedna wartosc - choc to moze zbiegokolicznosci ze dziala)...:

  1. <div id="ppp"></div>
  2. var n=document.getElementById('ppp');
  3. //var x=Math.round(Math.random()*8);
  4. var c=[3,7,8]; // liczby wykluczone
  5. n.innerHTML=losowaZwykluczeniem(c);
  6.  
  7. function losowaZwykluczeniem(tablicaWykluczonych)
  8. {
  9. var x=Math.round(Math.random()*8);
  10. for(var i=0;i<tablicaWykluczonych.length;i++)
  11. {
  12. if(tablicaWykluczonych[i]!=x)
  13. {
  14. return x;
  15. }
  16. else
  17. {
  18. x=Math.round(Math.random()*8);
  19. }
  20. }
  21. return x;
  22. }
Pawel_W
pomyśl jak działa to co napisałeś

losuję liczbę

sprawdzam czy liczba należy do tablicy, jeżeli nie to losuję kolejną i lecę dalej po pętli

zamiast tego powinieneś po każdym losowaniu odpalać pętlę od nowa
zimix
Nie wiem jak odpalic petle od nowa - na moj rozum wydaje mi sie, ze bym musial w kolko robic warunek w warunku...

  1. <div id="ppp"></div>
  2. <script type="text/javascript">
  3. var n=document.getElementById('ppp');
  4. var tablicaWykluczonych=[3,7,8];
  5. var x=Math.round(Math.random()*8);
  6. for(var i=0;i<9;i++)
  7. {
  8. if(tablicaWykluczonych[i]==x)
  9. {
  10. // i tu petla od nowa..? a potem znowu i znowu...
  11. x=Math.round(Math.random()*8);
  12. n.innerHTML=x;
  13. }
  14. else
  15. {
  16. n.innerHTML=x;
  17. }
  18. }
kamil4u
Jest coś takiego jak continue. Jeszcze będziesz musiał od zmiennej "i" odjąć jeden.
Pawel_W
Cytat(kamil4u @ 2.01.2013, 20:29:56 ) *
Jest coś takiego jak continue. Jeszcze będziesz musiał od zmiennej "i" odjąć jeden.

to jest podejście bardzo naokoło, można przecież tak:
  1. do {
  2. // losowanie liczby
  3. // sprawdzanie, czy należy do tablicy zakazanych liczb
  4. // jeżeli tak to unique=false i przerywamy petle
  5. } while (!unique)
lobopol
Można również napisać tego rodzaju funkcje jeżeli nie losujemy ze zbyt dużego zbioru liczb:
[JAVASCRIPT] pobierz, plaintext
  1. function random() {
  2. var numbers = [1,2,3,5,7,9,0,9];
  3. return numbers[Math.floor(Math.random() * numbers.length)];
  4. }
[JAVASCRIPT] pobierz, plaintext


gdzie w tablicy numbers są liczby którym pozwalamy się losować, ich wielokrotność zwiększa szanse wylosowania takiej samej
kamil4u
@Pawel_W: Masz rację. Z tym, że autor tematu jest początkujący i nie chciałem za dużo mieszać. smile.gif

Już nie mówiąc o tym, że tak nie powinniśmy tego robić, bo jest szansa, że nigdy nie wylosujemy liczby. Oczywiście to nie ten poziom problemu i w tym przypadku takie coś w zupełności wystarczy.
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.