Generera slumpmässiga nummer i ett intervall i Java

1. Översikt

I den här handledningen utforskar vi olika sätt att generera slumptal inom ett intervall.

2. Generera slumpmässiga nummer inom ett intervall

2.1. Matematik. Slump

Den Math.random ger en slumpmässig dubbel värde, som är större än eller lika med 0,0 och mindre än 1,0.

Låt oss använda Math.random- metoden för att generera ett slumpmässigt tal inom ett givet intervall:

public int getRandomNumber(int min, int max) { return (int) ((Math.random() * (max - min)) + min); }

Varför fungerar det? Tja, låt oss titta på vad som händer när Math.random returnerar 0,0, det är lägsta möjliga output:

0.0 * (max - min) + min => min

Så det lägsta antalet vi kan få är min.

Om Math.random returnerar 1.0 är det högsta möjliga utdata, då får vi:

1.0 * (max - min) + min => max - min + min => max

Så det högsta antalet vi kan få är max.

Låt oss se samma mönster upprepas med Random # nextInt i nästa avsnitt.

2.2. java.util.Random.nextInt

En instans av java.util.Random kan också användas för att göra detsamma.

Låt oss använda metoden java.util.Random.nextInt för att få ett slumptal:

public int getRandomNumberUsingNextInt(int min, int max) { Random random = new Random(); return random.nextInt(max - min) + min; }

Den min parameter (origo) är inkluderande, medan max , det bundna, är exklusiv

2.3. java.util.Random.ints

Den java.util.Random.ints metod returnerar ett IntStream av slumpmässiga heltal.

Så vi kan använda metoden java.util.Random.ints och returnera ett slumpmässigt tal:

public int getRandomNumberUsingInts(int min, int max) { Random random = new Random(); return random.ints(min, max) .findFirst() .getAsInt(); }

Även här är det angivna ursprunget min inkluderande och max är exklusivt.

3. Slutsats

I den här artikeln såg vi alternativa sätt att generera slumptal inom ett intervall.

Kodavsnitt, som alltid, finns på GitHub.