Generering av tilfeldige tall i Java

Mann holder briller mens han skriver kode på bærbar PC og flere skjermer.

Sarinya Pinngam / EyeEm / Getty Images





Genererer en serie med tilfeldige tall er en av de vanlige oppgavene som dukker opp fra tid til annen. I Java , kan det oppnås ganske enkelt ved å bruke klassen java.util.Random.

Det første trinnet, som med bruken av enhver API klasse , er å sette importerklæringen før starten av programklassen din:



Deretter oppretter du et tilfeldig objekt:

Random-objektet gir deg en enkel tilfeldig tallgenerator. Metodene til objektet gir muligheten til å velge tilfeldige tall. For eksempel vil nextInt()- og nextLong()-metodene returnere et tall som er innenfor verdiområdet (negative og positive) for henholdsvis int- og long-datatypene:



Tallene som returneres vil være tilfeldig valgte int og lange verdier:

Velge tilfeldige tall fra et bestemt område

Normalt må de tilfeldige tallene som skal genereres være fra et bestemt område (f.eks. mellom 1 og 40 inkludert). For dette formålet kan nextInt()-metoden også godta en int-parameter. Det angir den øvre grensen for rekkevidden av tall. Det øvre grensenummeret er imidlertid ikke inkludert som et av tallene som kan plukkes. Det kan høres forvirrende ut, men nextInt()-metoden fungerer fra null og oppover. For eksempel:

vil bare velge et tilfeldig tall fra 0 til 39 inkludert. For å velge fra et område som starter med 1, legg til 1 til resultatet av nextInt()-metoden. For å for eksempel velge et tall mellom 1 og 40, legg til ett til resultatet:

Hvis området starter fra et høyere tall enn ett, må du:



  • minus startnummeret fra øvre grensenummer og legg deretter til ett.
  • legg til startnummeret til resultatet av nextInt()-metoden.

For eksempel, for å velge et tall fra 5 til 35 inkludert, vil det øvre grensetallet være 35-5+1=31 og 5 må legges til resultatet:

Hvor tilfeldig er den tilfeldige klassen?

Jeg bør påpeke at Random-klassen genererer tilfeldige tall på en deterministisk måte. Algoritmen som produserer tilfeldigheten er basert på et tall som kalles et frø. Hvis frønummeret er kjent, er det mulig å finne ut tallene som skal produseres fra algoritmen. For å bevise dette vil jeg bruke tallene fra datoen da Neil Armstrong tråkket først på månen som mitt frønummer (20. juli 1969):​



Uansett hvem som kjører denne koden vil sekvensen av 'tilfeldige' tall som produseres være:

Som standard frønummeret som brukes av:



er gjeldende tid i millisekunder siden 1. januar 1970. Normalt vil dette produsere tilstrekkelig tilfeldige tall for de fleste formål. Vær imidlertid oppmerksom på at to tilfeldige tallgeneratorer opprettet innen samme millisekund vil generere de samme tilfeldige tallene.

Vær også forsiktig når du bruker Random-klassen for alle programmer som må ha en sikker tilfeldig tallgenerator (f.eks. et gamblingprogram). Det kan være mulig å gjette frønummeret basert på tiden applikasjonen kjører. Generelt, for applikasjoner der de tilfeldige tallene er helt kritiske, er det best å finne et alternativ til det tilfeldige objektet. For de fleste applikasjoner der det bare trenger å være et visst tilfeldig element (f.eks. terninger for et brettspill), fungerer det fint.