Java Random параметр

178
20 декабря 2017, 21:50

Здравствуйте, в приведенном ниже коде, не могу понять, почему при формировании объекта Random, в параметре указывается 47. Если я правильно понял, то в параметре указывается начальная точка последовательности случайных чисел. Но тогда почему на выводе числа которые меньше 47?

Answer 1

Random.next возвращает по сути всегда целое число, вычисляемое по формуле

 (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)

Точная формула не столь важна, важно что новое число зависит только от значения seed. Запомним это.

Конструктор принимает один параметр - seed (или вообще без параметра, тогда используется текущее время).

Этот seed будет использован для вычисления следующего числа, но сам он не будет возвращён в качестве случайного.

Теперь как вообще генерируются дробные числа.

Согласно документации

 public float nextFloat() {
   return next(24) / ((float)(1 << 24));
 }

Т.е. мы создаём целое число, обнуляем некоторое число бит, и делим на 2^24. Вы можете получить любое число вида N/2^24, 0<=N<2^24. Это объясняет почему числа в диапазоне [0,1).

Answer 2

Из жава дока

public float nextFloat()

Returns the next pseudorandom, uniformly distributed {@code float} * value between {@code 0.0} and {@code 1.0} from this random * number generator's sequence.

Answer 3

Вы не правильно поняли - в параметре показывается не точка отсчёта, а количество начиная с 0, т.е. от 0 до 46 включительно. В программировании отсчёт всегда ведётся с нуля. Что бы начался отсчёт с 47 нужен код такого типа - пример:

import java.util.Random;

public class rand {

public static void main(String[] args) {
    Random rand = new Random();
    int a = 47 + rand.nextInt(100 - 47);//отсчёт начнётся с 47 до 99 включительно
    System.out.print(a);
}

}

READ ALSO
Замена фрагмента ViewPager извне

Замена фрагмента ViewPager извне

Как можно заменить текущий фрагмент в ViewPager? Например, нужно заменить класс фрагмента, причем из другого класса, как можно это реализовать?

190
SQLite. Запись добавляется пустая

SQLite. Запись добавляется пустая

Запрос в JavaДобавляет пустую запись

142
Сформировать единый список ДТО

Сформировать единый список ДТО

Добрый день, я работаю из Spring Data JPA и возникла такая ситуацияДопустим в базе данных хранится информация про группу в университете(ид группы,...

155
Большая потеря кадров при отрисовке с помощью Swing

Большая потеря кадров при отрисовке с помощью Swing

Идет потеря кадров при отрисовке объектов с помощью Swing, хотел поинтересоваться как можно оптимизировать код или использовать более подходящие...

138