Генерировать короткие случайные числа в java?

Я хочу создать случайное число типа short точно так же, как есть функция для целочисленного типа Random.nextInt(134116). Как я могу это достичь?

Ответ 1

Нет метода Random.nextShort(), поэтому вы можете использовать

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

+1 - это потому, что метод возвращает число до указанного числа (исключение). См. здесь

Это будет генерировать числа от 0 до Short.MAX_VALUE включительно (отрицательные числа не запрашивались OP)

Ответ 2

Java-шорты включены в интервал -32 768 → +32 767.

почему бы вам не выполнить

Random.nextInt(65536) - 32768

и привести результат в короткую переменную?

Ответ 3

Самое эффективное решение, которое может производить все возможные короткие значения, - это сделать.

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

или даже быстрее

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

Ответ 4

Как насчет short s = (short) Random.nextInt();? Обратите внимание, что результирующее распределение может иметь смещение. Спецификация Java Language Specification гарантирует, что это не приведет к исключению, int будет усечен, чтобы соответствовать короткому.

ИЗМЕНИТЬ

Собственно, выполняя быстрый тест, результирующее распределение также равномерно распределяется.

Ответ 5

Просто сгенерируйте int как:

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

Сгенерированный int будет находиться в пространстве значений short, поэтому его можно отличить без потери данных.