15 votes

générer un nombre aléatoire court en java ?

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 ?

24voto

luketorjussen Points 2666

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).

13voto

Peter Lawrey Points 229686

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();

11voto

Skippy Fastol Points 775

Les shorts Java sont inclus dans l'intervalle -32 768 → +32 767.

pourquoi ne pas effectuer un

Random.nextInt(65536) - 32768

et transforme le résultat en un court variable ?

6voto

assylias Points 102015

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.

3voto

Tudor Points 39539

Il suffit de générer un int comme :

 short s = (short)Random.nextInt(Short.MAX_VALUE);

Le produit int sera dans l'espace de valeurs de short Il peut donc être coulé sans perte de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X