Jak si to tady čtu, nedá mi to nereagovat. Pokud vás ve škole učí přímo konkrétně Visual Basic .NET a v něm funkce Rnd a Randomize, což je přežitek ze starších verzí, tak je to velice tristní. Pokud vás učí Visual Basic 6 nebo Visual Basic integrovaný v Microsoft Office, pak je to naprosto správně. Ve VB.NET bychom totiž měli používat třídu Random, která je součástí .NET frameworku a umí generovat náhodná čísla daleko lépe. Abych shrnul, jak je to s náhodnými čísly doopravdy. Pokud budete používat Rnd, bude po spuštění programu vyhazovat pořád stejná čísla. Generátor náhodných čísel se totiž nachází v jakémsi výchozím stavu. Pokud chcete s funkcí Rnd generovat náhodná čísla opravdu náhodně, je nutno při startu programu zavolat funkci Randomize, která generátoru nastaví nějaký počáteční stav podle aktuálního času (takže to už víceméně bude generovat pokaždé jinak). Podotýkám ale, že tyto dvě funkce jsou přežité a zastaralé, správně bychom měli využívat třídu Random. Při vytvoření nového objektu třídy Random se generátor náhodnách čísel zinicializuje a bude vyhazovat již náhodná čísla, nesmíte ale generátor inicializovat při každém použití, to pak nefunguje tak, jak má. Zkrátka na začátku před samotným generováním si nadeklarujte proměnnou r, která bude držet objekt generátoru:
Dim r As New Random()
Pro generování čísel pak využijte funkci Next tohoto objektu (a jako parametr přidáte horní mez). Pokud tedy programujete třeba házení kostkou, napíšete tohle:
MsgBox(r.Next(6) + 1)
r.Next(6) vrací náhodná čísla od 0 do 5, ale na kostce padají čísla 1 až 6, takže musíme k tomuto přičíst ještě jedničku. Dejte tohle, prosím, přečíst svému učiteli. Nemyslím si, že vás to chtějí učit špatně, možná o třídě Random ví, ale nechtějí do začátečníků hned cpát objekty. Podle mě je na tom kus pravdy, na druhou stranu - je jedno, jestli si studenti zapamatujím že na začátku napíší Randomize a pak generují pomocí Rnd, anebo jestli na začátku napíší Dim r As New Random() a pak generují pomocí r.Next. V tomto případě to není o tolik složitější a chápání toho, že se vlastně vytváří objekt, je celkem zbytečné, na to přijdou sami časem, až naberou zkušenosti.
|