Я хочу создать случайное число типа short точно так же, как есть функция для целочисленного типа Random.nextInt(134116). Как я могу это достичь?
Генерировать короткие случайные числа в java?
Ответ 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
, поэтому его можно отличить без потери данных.