Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Java
Náhodná čísla
java
17. května 2002, 00.00 | Občas se stane, že potřebujete vygenerovat nějaké specifické náhodné číslo. Pojďme se tedy podívat, jak se dají náhodná čísla v Javě generovat.
Generování náhodných čísel patří u většiny jazyků k jedněm ze základních vlastností. Vesměs základní představa o náhodném čísle je, že náhodné číslo je číslo v rozsahu 0 až 1. Tato představa není zcela korektní a v průběhu následujících řádků si ji upřesníme.
Základním způsobem, jak se v Javě získá náhodné číslo, vychází z metody random třídy Math.
|
Tento příklad odpovídá naší základní představě o náhodném číslu jako o číslu v rozsahu 0 až 1.
Důležitá poznámka autora: již jsem zde několikráte zmínil slovo náhodné číslo a přesto zde v podstatě o náhodném čísle vůbec nemluvím. Asi bych to měl vysvětlit, co? Tento pojem je zavádějící z prostého důvodu, že počítače nejsou schopny, stejně tak jako lidský mozek, opravdu vymyslet pravé náhodné číslo. V obou případech je toto číslo získáno výpočtem. Jestli si pamatuji dobře, tak u PC bývá tento výpočet založen na časovači. Této vlastnosti si všimli i vojáci a v podstatě dokázali, že za sebou generovaná náhodná čísla vytvářejí jistou řadu, která lze predikovat. Proto pro své šifrovací potřeby vyvinuly speciální systémy pracující např. na pricipu rozpadu atomů. Ale ani tato metoda negeneruje pravé náhodné číslo, pouze minimalizuje tu možnost, že by se dal najít nějaký sofistikovaný výpočet na získání tohoto čísla. Celé je to umocněno faktem, že v současné době nikdo dost dobře nepochopil veškeré fyzikální jevy, které tento výběr řídí. Doufám, že tímto malinkým nakousnutím problému, jsem vám alespoň trochu ozřejmil fakt, že opravdové náhodné číslo v podstatě neexistuje, prozatím.
Jelikož jsem zde již naznačil, že náhodná čísla mají nějaké svou řadu, tak bychom se mohli podívat, jak tuto řadu využít. V prvním příkladě sice řada existuje, ale počítač si její existence není vědom. Proto vznikla možnost generování pseudo-náhodných čísel. Generátoru stačí jen zadat řadu a následně je schopen vytvářet vždy stejnou řadu náhodných čísel.
|
Příklad využívá třídy Random. Pří vytvoření ji lze předat tzv. Seed, což je pravé číslo náhodné řady. Nezadáte-li ho, použije se aktuální čas. To má za následek, to že neznáte řadu a tudíž generovaná číslo jsou pro vás náhodná neopakovatelná, stejně jako při Math.random(). Seed lze také změnit po vytvoření objektu metodou setSeed. Příklad má vracet vždy stejná náhodná čísla.
|
Třída Random se dá využít k generování náhodných čísel v předem požadovaném formátu1.
- nextDouble vrací double v rozmezí 0 až 1
- nextFloat stejně jako u double, pouze jiný primitivní datový typ
- nextInt první z celočíselných datových typů v rozmezí -2147483648 až +2147483647
- nextLong další celočíselný typ, tentokráte v rozsahu -922337203685775808 až +9223372036854775807
- nextGaussian generuje náhodná číslo s přednastaveným rozložením. Přesně řečeno s Gausovým rozložení tj. se střední hodnotou 0.0 a odchylkou 1.0.
Nejprimitivnější ukázka pak může vypadat takto:
|
Ještě jsem se nezmínil o jedná často požadované vlastnosti náhodného čísla, a to požadovaném rozsahu. Jak na to? Použije nám již známou třídu Random s jejím přepočtem
|
V prvním případě vytvoříme symetrickou množinu od -255 až po +255. V druhém, používanějším, vytvoříme rozsah od 0 .. 2552.
A to je vše. Zdrojové kódy
1. – Math.random() generuje primitivní datový typ double
2. – v Javě tomu paradoxně neodpovídá primitivní datový typ byte!
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007