Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]mt_rand bez powtórzeń
Wykrywacz
post 21.09.2009, 12:12:35
Post #1





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Siema, czy możecie pomóc wskazać mi gdzie robię błąd w założeniach? Bo kręci mi tym aż do czasu wywalenia timeouta.

Oczywiście chodzi mi o losowanko bez powtórzeń winksmiley.jpg

  1. function losowanie($zakres){
  2. return mt_rand(1,$zakres);
  3. }
  4. $tablica = array(0);
  5. for ($i=0;$i<10;$i++){
  6. do {
  7. $wynik = losowanie(100);
  8. } while (array_key_exists($wynik,$tablica) == false);
  9. $tablica +=$wynik;
  10. echo $tablica.'<br />';
  11. }
Go to the top of the page
+Quote Post
dr_bonzo
post 21.09.2009, 12:14:19
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


array_key_exists sprawdza czy indeks tablicy istnieje, a nie element.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Wykrywacz
post 21.09.2009, 13:08:34
Post #3





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No dobra to jak by jeszcze jakiś ćwok zamiast pomyśleć używał wyszukiwania to wklejam rozwiązanie jakie zrobiłem.

  1. for ($i=0;$i<10;$i++){
  2. do {
  3. $wynik = mt_rand(1,10);
  4. } while (isset($tablica[$wynik]));
  5. $tablica[$wynik] =$wynik;
  6. }
  7. foreach ($tablica as $klucz){
  8. echo $tablica[$klucz].'<br />';
  9. }


edit. jeszcze ładnie skróciłem aby nie robić wiochy

Ten post edytował Wykrywacz 21.09.2009, 13:14:59
Go to the top of the page
+Quote Post
zegarek84
post 21.09.2009, 13:13:28
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


  1. function losowanie($zakres){return mt_rand(1,$zakres);}
  2.  
  3. $tablica = array(0);
  4. for ($i=0;$i<10;$i++){
  5. do {$wynik = losowanie(100);} while (array_key_exists($wynik,$tablica) == false); //cała ta linijka jest wewnętrzną petlą gdzie wykonałeś pierwszy krok przy do a następnie nic nie robisz tylko sprawdzasz warunek w while podczas gdy w tym while nawet wartości nie zmieniasz tylko sprawdzasz do oporu - nie daleś klamry i kończy się na sredniku - no ale po co Ci pętla taka w pętli for?questionmark.gif
  6. //tu jest dalsza cześć pętli for - popraw sobie wcięcia ;)
  7. $tablica +=$wynik;
  8. echo $tablica.'<br />';
  9. }


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Wykrywacz
post 21.09.2009, 13:19:36
Post #5





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Dzięki ale już se poradziłem issetem. winksmiley.jpg Co jest wyżej winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 02:25