Hvordan genererer jeg tilfeldige heltall innenfor et bestemt område i Java?
Hvordan genererer jeg en tilfeldig int
-verdi i et bestemt område?
Jeg har prøvd følgende, men de fungerer ikke:
Forsøk 1:
randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Forsøk 2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.
3359
3
I Java 1.7 eller nyere er standardmetoden å gjøre dette på følgende måte:
Se den relevante JavaDoc. Denne tilnærmingen har den fordelen at det ikke er nødvendig å eksplisitt initialisere en java.util.Random-instans, noe som kan være en kilde til forvirring og feil hvis det brukes på feil måte.
På den annen side er det ingen måte å eksplisitt angi seed, så det kan være vanskelig å reprodusere resultater i situasjoner der det er nyttig, for eksempel testing eller lagring av spilltilstander eller lignende. I slike situasjoner kan pre-Java 1.7-teknikken vist nedenfor brukes.
Før Java 1.7 er standardmetoden å gjøre dette på følgende måte:
Se den relevante JavaDoc. I praksis er klassen java.util.Random ofte å foretrekke fremfor java.lang.Math.random().
Spesielt er det ikke nødvendig å finne opp hjulet for generering av tilfeldige heltall på nytt når det finnes et enkelt API i standardbiblioteket for å utføre oppgaven.
Bruk: