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 java.util. Tilfeldig klasse.
Det første trinnet, som med bruk av et hvilket som helst API klasse, er å legge importerklæringen før starten av programklassen din:
Deretter oppretter du et tilfeldig objekt:
Tilfeldig objekt gir deg en enkel generator for tilfeldig tall. Metodene til objektet gir muligheten til å velge tilfeldige tall. For eksempel vil metoden nextInt () og nextLong () returnere et tall som er innenfor verdiene (negativt og positivt) for henholdsvis int og lange datatyper:
De returnerte tallene vil bli valgt tilfeldig og lange verdier:
Velge tilfeldige tall fra et bestemt område
Normalt må tilfeldige tall som skal genereres være fra et visst område (f.eks. Mellom 1 og 40 inkludert). For dette formålet kan nextInt () -metoden også godta en int-parameter. Den angir den øvre grensen for tallområdet. Det øvre grensetallet er imidlertid ikke inkludert som et av tallene som kan velges. Det høres kanskje forvirrende ut, men nextInt () -metoden fungerer fra null og oppover. For eksempel:
vil bare velge et tilfeldig tall fra 0 til 39 inklusive. For å velge fra et område som begynner med 1, bare legg til 1 til resultatet av nesteInt () -metoden. For å velge et tall mellom 1 og 40 inkluderer du for eksempel et resultat:
Hvis området starter fra et høyere tall enn et, må du:
- minus startnummeret fra det øvre grensetallet, og legg deretter til et.
- legg til startnummeret til resultatet av metoden NextInt ().
For å velge et tall fra 5 til 35 inklusivt, vil det øvre grensetallet være 35-5 + 1 = 31 og 5 må legges til resultatet:
Hvor tilfeldig er den tilfeldige klassen?
Jeg skal påpeke at Tilfeldig-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 bruker jeg tallene fra datoen Neil Armstrong trappet først på Månen som frønummer (20. juli 1969):
Uansett hvem som kjører denne koden, vil sekvensen av "tilfeldige" produserte tall være:
Som standard kornnummeret som brukes av:
er den nåværende tiden 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 i løpet av samme millisekund vil generere de samme tilfeldige tall.
Vær også forsiktig når du bruker klassen Tilfeldig for et program som må ha en sikker tilfeldig tallgenerator (for eksempel et pengeprogram). Det kan være mulig å gjette frønummeret basert på tidspunktet for applikasjonen kjører. Generelt, for applikasjoner der tilfeldige tall er helt kritiske, er det best å finne et alternativ til tilfeldig objekt. For de fleste applikasjoner hvor det bare trenger å være et visst tilfeldig element (f.eks. Terninger for et brettspill), fungerer det fint.