Vandaag zullen we bekijken hoe we een willekeurig getal kunnen genereren in Java. Soms hebben we willekeurige getallen nodig in Java-programma’s. Bijvoorbeeld, voor een dobbelspel of om een willekeurige sleutel-ID te genereren voor encryptie, enzovoort.
Willekeurige getallengenerator in Java
Er zijn veel manieren om een willekeurig getal te genereren in Java.
- De klasse java.util.Random kan worden gebruikt om willekeurige getallen te creëren. Het biedt verschillende methoden om willekeurige gehele getallen, longs, dubbels, enzovoort te genereren.
- We kunnen ook Math.random() gebruiken om een double te genereren. Deze methode gebruikt intern de klasse Java Random.
- De klasse
java.util.concurrent.ThreadLocalRandom
moet worden gebruikt om een willekeurig getal te genereren in een multithreadomgeving. Deze klasse maakt deel uit van Java Concurrent-pakket en is geïntroduceerd in Java 1.7. Deze klasse heeft methoden vergelijkbaar met de klasse Java Random. - De klasse
java.security.SecureRandom
kan worden gebruikt om een willekeurig getal te genereren met sterke beveiliging. Deze klasse biedt een cryptografisch sterke willekeurige getallengenerator. Het is echter traag in verwerking. Dus, afhankelijk van de vereisten van uw toepassing, moet u beslissen of u het al dan niet wilt gebruiken.
Java Willekeurige Nummer Generator
Laten we eens kijken naar enkele voorbeelden om een willekeurig nummer te genereren in Java. Later zullen we ook een voorbeeldprogramma bekijken van ThreadLocalRandom en SecureRandom.
1. Genereer Willekeurig geheel getal
Random random = new Random();
int rand = random.nextInt();
Ja, het is zo eenvoudig om een willekeurig geheel getal te genereren in Java. Wanneer we de Random instantie maken, genereert het een lange seed-waarde die wordt gebruikt in alle nextXXX
-methodeaanroepen. We kunnen deze seed-waarde instellen in het programma, maar dit is meestal niet vereist in de meeste gevallen.
//stel de lange seed-waarde in met behulp van de Random constructor
Random random = new Random(123456789);
//stel de lange seed-waarde in met behulp van de setter methode
Random random1 = new Random();
random1.setSeed(1234567890);
2. Willekeurig getal in Java tussen 1 en 10
Soms moeten we een willekeurig getal genereren binnen een bereik. Bijvoorbeeld, in een dobbelspel kunnen mogelijke waarden alleen tussen 1 en 6 liggen. Hieronder staat de code die laat zien hoe je een willekeurig getal kunt genereren tussen 1 en 10, inclusief 10.
Random random = new Random();
int rand = 0;
while (true){
rand = random.nextInt(11);
if(rand !=0) break;
}
System.out.println(rand);
Het argument in de methode nextInt(int x)
wordt uitgesloten, dus moeten we het argument als 11 opgeven. Ook is 0 inbegrepen in het gegenereerde willekeurige getal, dus moeten we de nextInt-methode blijven aanroepen totdat we een waarde tussen 1 en 10 krijgen. Je kunt de bovenstaande code uitbreiden om het willekeurige getal binnen een opgegeven bereik te genereren.
3. Genereer willekeurige double
We kunnen Math.random()
of de methode nextDouble
van de Random-klasse gebruiken om een willekeurig double-getal te genereren in Java.
Random random = new Random();
double d = random.nextDouble();
double d1 = Math.random();
4. Genereer willekeurige float
Random random = new Random();
float f = random.nextFloat();
5. Genereer willekeurige long
Random random = new Random();
long l = random.nextLong();
6. Genereer willekeurige boolean
Random random = new Random();
boolean flag = random.nextBoolean();
7. Genereer willekeurige byte-array
We kunnen willekeurige bytes genereren en deze plaatsen in een door de gebruiker geleverde byte-array met behulp van de Random-klasse. Het aantal willekeurige bytes dat wordt geproduceerd, is gelijk aan de lengte van de byte-array.
Random random = new Random();
byte[] randomByteArray = new byte[5];
random.nextBytes(randomByteArray);
System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]
8. ThreadLocalRandom in een multithreadomgeving
Hier is een eenvoudig voorbeeld van het gebruik van ThreadLocalRandom in een multithreadomgeving.
package com.journaldev.randomnumber;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
for (int i = 0; i < 5; i++) {
Thread t = new Thread(runnable);
t.setName("MyRunnable-Thread-" + i);
t.start();
}
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
String threadName = Thread.currentThread().getName();
System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
}
}
Hieronder staat een voorbeeldoutput van mijn uitvoering van het bovenstaande programma.
MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276
We kunnen geen zaadwaarde instellen voor een ThreadLocalRandom-instantie, het zal een UnsupportedOperationException
veroorzaken. De ThreadLocalRandom-klasse heeft ook enkele extra hulpprogramma-methoden om een willekeurig getal binnen een bereik te genereren. Bijvoorbeeld, om een willekeurig getal tussen 1 en 10 te genereren, kunnen we het als volgt doen.
ThreadLocalRandom random = ThreadLocalRandom.current();
int rand = random.nextInt(1, 11);
ThreadLocalRandom heeft vergelijkbare methoden voor het genereren van willekeurige lange en dubbele waarden.
9. Voorbeeld van SecureRandom
Je kunt de SecureRandom-klasse gebruiken om veiligere willekeurige getallen te genereren met een van de vermelde providers. Hieronder staat een snel voorbeeldcode voor SecureRandom.
Random random = new SecureRandom();
int rand = random.nextInt();
System.out.println(rand);
Dat is alles over het genereren van een willekeurig getal in een Java-programma.
Je kunt de voorbeeldcode downloaden van onze GitHub Repository.
Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java