Nejaušo skaitļu ģenerēšana Java

Vīrietis tur brilles, rakstot kodu uz klēpjdatora un vairākiem monitoriem.

Sarinya Pinngam / EyeEm / Getty Images





Sērijas ģenerēšana nejauši skaitļi ir viens no tiem bieži sastopamajiem uzdevumiem, kas ik pa laikam parādās. In Java , to var panākt, vienkārši izmantojot java.util.Random klasi.

Pirmais solis, tāpat kā jebkura API izmantošana klasē , ir ievietot importēšanas paziņojumu pirms programmas klases sākuma:



Pēc tam izveidojiet nejaušu objektu:

Nejaušais objekts nodrošina vienkāršu nejaušo skaitļu ģeneratoru. Objekta metodes dod iespēju izvēlēties nejaušus skaitļus. Piemēram, nextInt() un nextLong() metodes atgriezīs skaitli, kas ir attiecīgi int un garo datu tipu vērtību diapazonā (negatīvs un pozitīvs):



Atgrieztie skaitļi tiks nejauši izvēlēti iekšējās un garās vērtības:

Izvēlēties nejaušus skaitļus no noteikta diapazona

Parasti ģenerējamajiem nejaušajiem skaitļiem ir jābūt no noteikta diapazona (piemēram, no 1 līdz 40 ieskaitot). Šim nolūkam nextInt() metode var pieņemt arī int parametru. Tas apzīmē skaitļu diapazona augšējo robežu. Tomēr augšējā ierobežojuma numurs nav iekļauts kā viens no skaitļiem, ko var izvēlēties. Tas var likties mulsinoši, bet nextInt () metode darbojas no nulles uz augšu. Piemēram:

izvēlēsies tikai nejaušu skaitli no 0 līdz 39 (ieskaitot). Lai izvēlētos no diapazona, kas sākas ar 1, vienkārši pievienojiet 1 nākamāsInt() metodes rezultātam. Piemēram, lai izvēlētos skaitli no 1 līdz 40, rezultātam pievienojiet vienu:

Ja diapazons sākas no lielāka skaitļa par vienu, jums būs nepieciešams:



  • atskaitot sākuma skaitli no augšējā ierobežojuma skaitļa un pēc tam pievienojiet vienu.
  • pievienojiet sākuma skaitli nextInt() metodes rezultātam.

Piemēram, lai izvēlētos skaitli no 5 līdz 35 (ieskaitot), augšējā robeža ir 35-5+1=31, un rezultātam jāpievieno 5:

Cik nejauša ir izlases klase?

Man jānorāda, ka Random klase ģenerē nejaušus skaitļus deterministiskā veidā. Algoritms, kas rada nejaušību, ir balstīts uz skaitli, ko sauc par sēklu. Ja sākuma numurs ir zināms, tad ir iespējams izdomāt skaitļus, kas tiks iegūti no algoritma. Lai to pierādītu, es izmantošu skaitļus no tā datuma Nīls Ārmstrongs pirmo reizi uzkāpu uz Mēness kā mans sēklu numurs (1969. gada 20. jūlijs):​



Neatkarīgi no tā, kurš vada šo kodu, izveidotā “nejaušo” skaitļu secība būs šāda:

Pēc noklusējuma sākuma numurs, ko izmanto:



ir pašreizējais laiks milisekundēs kopš 1970. gada 1. janvāra. Parasti tas radīs pietiekami nejaušus skaitļus lielākajai daļai mērķu. Tomēr ņemiet vērā, ka divi nejaušu skaitļu ģeneratori, kas izveidoti vienas milisekundes laikā, ģenerēs tos pašus nejaušos skaitļus.

Esiet arī piesardzīgs, izmantojot klasi Random jebkurai lietojumprogrammai, kurai ir jābūt drošam nejaušo skaitļu ģeneratoram (piemēram, azartspēļu programmai). Var būt iespējams uzminēt sākuma numuru, pamatojoties uz lietojumprogrammas darbības laiku. Parasti lietojumprogrammām, kurās nejaušie skaitļi ir absolūti kritiski, vislabāk ir atrast alternatīvu objektam Random. Lielākajai daļai lietojumprogrammu, kur ir nepieciešams tikai noteikts nejaušs elements (piemēram, galda spēles kauliņi), tas darbojas labi.