Je veux générer un nombre aléatoire de type short exactement comme il existe une fonction pour le type integer appelée Random.nextInt(134116). Comment puis-je y parvenir ?
Réponses
Trop de publicités?Il n'y a pas Random.nextShort()
vous pouvez donc utiliser la méthode
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
Le +1 est dû au fait que la méthode renvoie un nombre jusqu'au nombre spécifié (exclusif). Voir aquí
Cela générera des nombres de 0 à Short.MAX_VALUE inclus (les nombres négatifs n'étaient pas demandés par le PO).
La solution la plus efficace qui peut produire toutes les valeurs courtes possibles est de faire l'un ou l'autre.
short s = (short) random.nextInt(1 << 16); // any short
short s = (short) random.nextInt(1 << 15); // any non-negative short
ou encore plus rapidement
class MyRandom extends Random {
public short nextShort() {
return (short) next(16); // give me just 16 bits.
}
public short nextNonNegativeShort() {
return (short) next(15); // give me just 15 bits.
}
}
short s = myRandom.nextShort();
Qu'en est-il short s = (short) Random.nextInt();
? Notez que la distribution résultante peut avoir un biais. La spécification du langage Java garantit que cela n'entraînera pas d'exception, les int seront tronqués pour tenir dans un short.
EDIT
En fait, en faisant un test rapide, la distribution résultante semble également être uniformément distribuée.