Atsitiktinių skaičių generavimas „Java“

Generavimas serijos atsitiktiniai skaičiai yra viena iš tų bendrų užduočių, kurios kartas nuo karto užklumpa. Į „Java“, tai galima pasiekti paprasčiausiai naudojantis java.util. Atsitiktinė klasė.

Pirmasis žingsnis, kaip ir naudojant bet kurią API klasė, reiškia, kad importavimo pareiškimas bus pateiktas prieš prasidedant savo programos klasei:

Tada sukurkite atsitiktinį objektą:

„Random“ objektas suteikia jums paprastą atsitiktinių skaičių generatorių. Objekto metodai suteikia galimybę pasirinkti atsitiktinius skaičius. Pavyzdžiui, „NextInt“ () ir „NextLong ()“ metodai grąžins skaičių, kuris yra vidinių ir ilgųjų duomenų tipų verčių diapazone (neigiamas ir teigiamas):

Grąžinti skaičiai bus atsitiktinai parinkti int ir ilgomis reikšmėmis:

Atsitiktinių skaičių pasirinkimas iš tam tikro diapazono

Paprastai atsitiktiniai skaičiai turi būti generuojami iš tam tikro diapazono (pvz., Nuo 1 iki 40 imtinai). Šiuo tikslu „nextInt“ () metodas taip pat gali priimti int parametrą. Tai žymi viršutinę skaičių diapazono ribą. Tačiau viršutinė ribinė vertė nėra įtraukta kaip vienas iš skaičių, kurį galima pasirinkti. Tai gali atrodyti painu, tačiau NextInt () metodas veikia nuo nulio į viršų. Pavyzdžiui:

instagram viewer

rinksis tik atsitiktinį skaičių nuo 0 iki 39 imtinai. Norėdami pasirinkti iš diapazono, kuris prasideda 1, paprasčiausiai pridėkite 1 prie NextInt () metodo rezultato. Pvz., Jei norite pasirinkti skaičių nuo 1 iki 40 imtinai, pridėkite vieną prie rezultato:

Jei diapazonas prasideda nuo didesnio nei vienas skaičius, turėsite:

  • atėmus pradinį skaičių nuo viršutinio ribinio skaičiaus ir pridedant.
  • pridėkite pradinį skaičių prie NextInt () metodo rezultato.

Pvz., Jei norite pasirinkti skaičių nuo 5 iki 35 imtinai, viršutinė riba bus 35–5 + 1 = 31, o prie rezultato reikia pridėti 5:

Kaip atsitiktinė klasė yra atsitiktinė?

Turėčiau pabrėžti, kad atsitiktinių klasių atsitiktiniai skaičiai generuojami determinuotai. Atsitiktinumą sukuriantis algoritmas remiasi skaičiumi, vadinamu pradine. Jei sėklų skaičius yra žinomas, tada galima išsiaiškinti skaičius, kurie bus sukurti iš algoritmo. Norėdami tai įrodyti, naudosiu skaičius nuo tos dienos Neilas Armstrongas pirmą kartą pakilo į Mėnulį kaip mano sėklos numeris (1969 m. liepos 20 d.):

Nesvarbu, kas valdo šį kodą, „atsitiktinių“ skaičių seka bus tokia:

Pagal numatytuosius nustatymus sėklos numeris, kurį naudoja:

yra dabartinis laikas milisekundėmis nuo 1970 m. sausio 1 d. Paprastai tai duos pakankamai atsitiktinius skaičius daugeliui tikslų. Tačiau atkreipkite dėmesį, kad du atsitiktinių skaičių generatoriai, sukurti per tą pačią milisekundę, sugeneruos tuos pačius atsitiktinius skaičius.

Taip pat būkite atsargūs, kai „Random“ klasę naudojate bet kuriai programai, kurioje turi būti saugus atsitiktinių skaičių generatorius (pvz., Lošimų programa). Gali būti įmanoma atspėti sėklų skaičių pagal programos veikimo laiką. Paprastai toms programoms, kuriose atsitiktiniai skaičiai yra absoliučiai kritiniai, geriau rasti alternatyvą atsitiktiniam objektui. Daugelyje programų, kur tereikia turėti tam tikrą atsitiktinį elementą (pvz., Stalo žaidimo kauliukus), jis veikia gerai.