2012-04-17 22 views

Respuesta

19

No hay Random.nextShort() método, por lo que podría utilizar

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

La 1 se debe a que el método devuelve un número hasta el número especificado (exclusivo). Ver here

Esto generará un número de 0 a Short.MAX_VALUE incluido (números negativos no fueron solicitados por la OP)

+0

Y se necesita un yeso. –

+0

gracias @juergend, tengo la respuesta – luketorjussen

+0

¿Pero si agregas 1 no podrás generar 0? – Tudor

6

¿Qué tal short s = (short) Random.nextInt();? Tenga en cuenta que la distribución resultante puede tener un sesgo. La Especificación del lenguaje Java garantiza que esto no dará lugar a una excepción, el int se truncará para caber en un corto.

EDITAR

realmente hacer una prueba rápida, la distribución resultante parece estar distribuida uniformemente también.

+0

¿Qué sucede si el número generado es mayor que el que se mantiene en un corto? – luketorjussen

+0

solo se conservarán los últimos cuatro bits, pero no generará un desbordamiento. – assylias

+0

pero ¿alterará la uniformidad ajustada de los números aleatorios generados? –

9

pantalones cortos de Java se incluyen en el -32 768 32 767 → intervalo.

¿por qué no realizar una

Random.nextInt(65536) - 32768 

y emitir el resultado en una variable de corto?

+1

+1 - Estaba a punto de escribir exactamente eso. – Deco

+4

Lo supongo y lo escribí por ti para que alargues la vida útil de tu teclado. –

3

generar simplemente un int como:

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

El generada int habrá en el espacio de valores de short, por lo que se puede lanzar sin pérdida de datos.

+0

Eso generará valores cortos no negativos, excepto Short.MAX_VALUE –

8

La solución más eficaz que puede producir todos los valores posibles cortos es hacerlo bien.

short s = (short) random.nextInt(1 << 16); // any short 
short s = (short) random.nextInt(1 << 15); // any non-negative short 

o incluso más rápido

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

Bien hecho. – assylias

Cuestiones relacionadas