Random java примеры

Генерация случайного числа в заданном диапазоне

Привет по ту сторону экрана. Любой из нас рано или поздно встречается с необходимостью генерировать случайное число в заданном нами диапазоне будь то вещественное или целое число. Для чего? На самом деле это не важно, это может быть функция для расчета шанса для запуска какого нибудь события, получение случайного множителя или любого другая. Итак, для чего это нужно разобрались, а именно для чего угодно 🙂 На самом деле методов получения псевдослучайного числа очень много, я же приведу пример с классом Math, а именно с методом random(); Что же мы имеем? Вызов метода Math.random() возвращает псевдослучайное вещественное число (double) из диапазона нам необходимо прибавить к нашему max 1, а затем преобразовать в целое число типа int или long (зависит от диапазонов которые Вы будете использовать). Пишем код: public static void main(String… args) { final int max = 100; // Максимальное число для диапазона от 0 до max final int rnd = rnd(max); System.out.println(«Псевдослучайное целое число: » + rnd); } /** * Метод получения псевдослучайного целого числа от 0 до max (включая max); */ public static int rnd(int max) { return (int) (Math.random() * ++max); } Примечание: Как видите переменная max была инкрементирована префиксной формой. (Если Вы не знаете что это советую почитать мою статью) Отлично, мы получили то что хотели, но если нам нужен диапазон не от 0, а к примеру Пишем код: public static void main(String… args) { final int min = 10; // Минимальное число для диапазона final int max = 75; // Максимальное число для диапазона final int rnd = rnd(min, max); System.out.println(«Псевдослучайное целое число: » + rnd); } /** * Метод получения псевдослучайного целого числа от min до max (включая max); */ public static int rnd(int min, int max) { max -= min; return (int) (Math.random() * ++max) + min; } Разбор кода из метода rnd: Минимальное число диапазона = 10; Максимальное число диапазона = 75; max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа. Максимальное число после расчета равно 65 Псевдослучайное вещественное число (к примеру) равно 0.18283417347179454 (Был получен при вызове Math.random()). Максимальное число перед умножением было инкрементировано префиксной формой. Максимальное число теперь 66 Умножаем 0.18283417347179454 на 66. Результат умножения равен 12.06705544913844. Преобразовываем результат умножения максимального числа на псевдослучайное вещественное число к типу целого числа int. Прибавляем минимальное число к преобразованному результату который равен 12. Возвращаем результат: 22 Как видно из разбора, даже если псевдослучайное вещественное число будет равно нулю, то мы вернем наш минимум в результате сложения нашего минимального числа с результатом умножения. Надеюсь для Вас это было полезно и познавательно. Успехов в освоении Java 😉 Еще пару моих статей: Что такое инкрементирование и декрементирование Оператор деления по модулю

Класс Random

Котаны, читайте на здоровье!

×

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Закрыть

Класс java.util.Random представляет собой генератор псевдослучайных чисел.

Класс представлен двумя конструкторами

  • Random() — создаёт генератор чисел, использующий уникальное начальное число
  • Random(long seed) — позволяет указать начальное число вручную

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

Методы:

  • boolean nextBoolean() — возвращает следующее случайное значение типа boolean
  • void nextBytes(byte buf) — заполняет массив случайно созданными значениями
  • double nextDouble() — возвращает следующее случайное значение типа double
  • float nextFloat() — возвращает следующее случайное значение типа float
  • synchronized double nextGaussian() — возвращает следующее случайное значение гауссова случайного числа, т.е. значения, центрированное по 0.0 со стандартным отклонением в 1.0 (кривая нормального распределения)
  • int nextInt(int n) — возвращает следующее случайное значение типа int в диапазоне от 0 до n
  • int nextInt() — возвращает следующее случайное значение типа int
  • long nextLong() — возвращает следующее случайное значение типа long
  • synchronized void setSeeD(long seed) — устанавливает начальное значение

Пример для вывода случайного числа.

final Random random = new Random(); public void onClick(View v) { mInfoTextView.setText(String.valueOf(random.nextInt())); }

Случайные числа часто используются в играх. Допустим, мы хотим вывести случайные числа от 1 до 6 при бросании игрального кубика. Попробуем.

mInfoTextView.setText(String.valueOf(random.nextInt(6)));

При проверке вы заметите две нестыковки. Во-первых, иногда выпадает число 0, которого нет на кубике, а во-вторых никогда не выпадает число 6. Когда вы помещаете число в параметр метода, то это означает, что выпадают числа в диапазоне от 0 до указанного числа, которое в этот диапазон не входит. Если вы будете использовать число 7, то шестёрка станет выпадать, но по-прежнему будет выпадать число 0. Поэтому пример следует немного отредактировать.

mInfoTextView.setText(String.valueOf(random.nextInt(6) + 1));

Для генерации 10 чисел типа int используйте код:

String result = «»; for(int i = 0; i < 10; i++){ result += String.valueOf(myRandom.nextInt()) + «\n»; } mInfoTextView.setText(result);

Генерация в определённом интервале

Нужны случайные числа от 100 до 200? Пишем код.

int min = 100; int max = 200; int diff = max — min; Random random = new Random(); int i = random.nextInt(diff + 1); i += min;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *