Генерируем случайное число java
Содержание:
- JavaScript Random Number function getRndInteger(minimum, maximum) ( return Math.floor(Math.random() * (maximum — minimum)) + minimum; ) document.getElementById(«random_number»).innerHTML = getRndInteger(10, 1000);
- Генерируем случайное число в Java 8 — особенности
- Java Random Class
- Методы
- Java Math.random Between Two Numbers
- Generating Javascript Random Numbers More Easily
- Window
- How to generate random numbers in Java?
- Random Number Generator in Java
- Random Number Generators (RNGs) in the Java platform
- Генерация случайных чисел с помощью класса Math
- Generating Javascript Random Numbers
- Just Show Me the Code
- Extending
JavaScript Random Number function getRndInteger(minimum, maximum) ( return Math.floor(Math.random() * (maximum — minimum)) + minimum; ) document.getElementById(«random_number»).innerHTML = getRndInteger(10, 1000);
Этот код очень похож на приведенный выше. Мы вызываем здесь одну и ту же функцию с разными параметрами.
7. Могу ли я получить уникальное случайное число?
Да, мы можем получить уникальный номер. Но мы не можем назвать это действительно случайным, мы можем назвать это действительно уникальным. Не только используя это, но и используя временную метку JavaScript. Мы можем сгенерировать это программно. Мы можем хранить уже сгенерированный случайным образом в массиве. Мы можем сравнить вновь сгенерированное число с уже существующим в массиве. Если мы существуем в массиве, мы можем снова вызвать случайную функцию, чтобы получить уникальную.
Это безопасно?
Нет, с безопасностью не за что. Это не кодируется и не декодируется, а просто генерирует случайное число. Мы можем воспользоваться преимуществами этого типа функции при генерации OTP (одноразового пароля) фиксированной длины. Таким образом, мы должны избегать использования этого в целях безопасности. Мы можем использовать это как функцию генератора OTP.
Теперь пришло время проверить себя
1. В JavaScript мы можем получить только случайные числа только указанного диапазона? Правда или ложь? 2. JavaScript использует библиотеку MATH для встроенной случайной функции. Правда или ложь? 3. Можете ли вы написать программу на JavaScript для печати случайного числа от 50 до 100? Вы можете воспользоваться подсказкой из проверки кода выше для getRndInteger (10, 20).
Вывод — Генератор случайных чисел в JavaScript
Мы должны использовать функцию Radom при работе с любым языком программирования для удовлетворения различных бизнес-требований. Случайная функция JavaScript может использоваться для удовлетворения различных потребностей бизнеса. Мы можем использовать тот же вывод JavaScript для программирования на стороне сервера. Например, если мы используем JavaScript с PHP, мы можем также использовать эту функцию в PHP для удовлетворения наших потребностей в программировании. Мы можем использовать эту игру в угадайку или другие вещи, связанные с OTP. Мы можем использовать это для генерации любого указанного числа случайных цифр, как мы видим в нескольких примерах выше. Кроме того, мы должны избегать использования этого в зашифрованном виде, поскольку это обычная случайная цифра.
Рекомендуемые статьи
Это руководство для генератора случайных чисел в JavaScript. Здесь мы обсуждаем случайное число в JavaScript с примерами. Вы также можете посмотреть следующую статью, чтобы узнать больше —
- Генератор случайных чисел в Python
- Генератор случайных чисел в C
- Генератор случайных чисел в R
- Шаблоны в JavaScript
- Генератор случайных чисел в PHP
Генерируем случайное число в Java 8 — особенности
В Java 8 был представлен новый метод класса java.util.Random — ints(). Он возвращает неограниченный поток псевдослучайных значений int. Данный метод позволяет указать диапазон чисел, задав минимальное и максимальное значения.
Пример использования метода Random.ints() для генерации случайных целочисленных значений в указанном диапазоне:
public static int getRandomNumberInts(int min, int max){ Random random = new Random(); return random.ints(min,(max+1)).findFirst().getAsInt(); }
Метод getRandomNumberInts( ) генерирует поток случайных целых чисел от min(включительно) и до max (не входит в диапазон).
Метод ints( ) создает IntStream, поэтому будет вызвана функция findFirst( ). Она возвращает объект OptionalInt , который описывает первый элемент этого потока. Затем код вызывает метод getAsInt( ), чтобы вернуть значение int в OptionalInt.
Пример использования метода Random.ints() для генерации потока случайных целочисленных значений:
public static void getStreamOfRandomInts(int num) { Random random = new Random(); random.ints(num).sorted().forEach(System.out::println); }
Код для вызова предыдущего метода:
System.out.println("Random int stream: RandomIntStreamofSize = "); RandomDemo.getStreamOfRandomInts(5);
Результат работы приведенного выше кода:
Random int stream: RandomIntStreamofSize = -1861317227 -1205557317 453883217 762357682 1725970934
Пример использования метода Random.ints() для генерации потока из диапазона случайных целочисленных значений:
public static void getStreamOfRandomIntsWithRange(int num, int min, int max) { Random random = new Random(); random.ints(num,min, max).sorted().forEach(System.out::println); }
Код для вызова приведенного выше метода:
System.out.println("Random int stream of specified size in range: RandomIntStreamofSizeInRange = "); RandomDemo.getStreamOfRandomIntsWithRange(5,0,10);
Результат работы предыдущего примера:
Random int stream of specified size in range: RandomIntStreamofSizeInRange = 2 2 3 4 6
Кроме ints( ) существует еще несколько методов, которые были добавлены к классу Random в Java 8. Они могут возвращать последовательный поток случайных чисел. Это:
- LongStream longs( );
- DoubleStream doubles( ).
Java Random Class
- class is part of java.util package.
- An instance of java Random class is used to generate random numbers.
- This class provides several methods to generate random numbers of type integer, double, long, float etc.
- Random number generation algorithm works on the seed value. If not provided, seed value is created from system nano time.
- If two Random instances have same seed value, then they will generate same sequence of random numbers.
- Java Random class is thread-safe, however in multithreaded environment it’s advised to use class.
- Random class instances are not suitable for security sensitive applications, better to use in those cases.
Java Random Constructors
Java Random class has two constructors which are given below:
- : creates new random generator
- : creates new random generator using specified seed
Java Random Class Methods
Let’s have a look at some of the methods of java Random class.
- : This method returns next pseudorandom which is a boolean value from random number generator sequence.
- : This method returns next pseudorandom which is double value between 0.0 and 1.0.
- : This method returns next pseudorandom which is float value between 0.0 and 1.0.
- : This method returns next int value from random number generator sequence.
- nextInt(int n): This method return a pseudorandom which is int value between 0 and specified value from random number generator sequence.
Java Random Example
Let’s have a look at the below java Random example program.
Output of the above program is:
Check this post for more about Java Radom Number Generation.
Generate Random Number using Seed
There are two ways we can generate random number using seed.
The seed is the initial value of the internal state of the pseudorandom number generator which is maintained by method next(int).
Output of the above program is:
What if we pass same seed to two different random number generators?
Let’s have a look at the below program and see what happen if we pass same seed to two different random number generators.
Output of the above program is:
We can see that it will generate same random number if we pass same seed to two different random number generators.
Java 8 Random Class Methods
As you can see from above image, there are many new methods added in Java 8 to Random class. These methods can produce a stream of random numbers. Below is a simple program to generate a stream of 5 integers between 1 and 100.
That’s all for a quick roundup on Java Random Class.
Reference: API Doc
Методы
Обратите внимание, что тригонометрические функции (, , , , , и ) принимают в параметрах или возвращают углы в радианах. Для преобразования радианов в градусы, поделите их на величину ; для преобразования в обратном направлении, умножьте градусы на эту же величину
Обратите внимание, что точность большинства математических функций зависит от реализации. Это означает, что различные браузеры могут дать разные результаты, более того, даже один и тот же движок JavaScript на различных операционных системах или архитектурах может выдать разные результаты
- Возвращает абсолютное значение числа.
- Возвращает арккосинус числа.
- Возвращает гиперболический арккосинус числа.
- Возвращает арксинус числа.
- Возвращает гиперболический арксинус числа.
- Возвращает арктангенс числа.
- Возвращает гиперболический арктангенс числа.
- Возвращает арктангенс от частного своих аргументов.
- Возвращает кубический корень числа.
- Возвращает значение числа, округлённое к большему целому.
- Возвращает количество ведущих нулей 32-битного целого числа.
- Возвращает косинус числа.
- Возвращает гиперболический косинус числа.
- Возвращает Ex, где x — аргумент, а E — число Эйлера (2,718…), основание натурального логарифма.
- Возвращает , из которого вычли единицу.
- Возвращает значение числа, округлённое к меньшему целому.
- Возвращает ближайшее число с плавающей запятой одинарной точности, представляющие это число.
- Возвращает квадратный корень из суммы квадратов своих аргументов.
- Возвращает результат умножения 32-битных целых чисел.
- Возвращает натуральный логарифм числа (loge, также известен как ln).
- Возвращает натуральный логарифм числа (loge, также известен как ln).
- Возвращает десятичный логарифм числа.
- Возвращает двоичный логарифм числа.
- Возвращает наибольшее число из своих аргументов.
- Возвращает наименьшее число из своих аргументов.
- Возвращает основание в степени экспоненты, то есть, значение выражения .
- Возвращает псевдослучайное число в диапазоне от 0 до 1.
- Возвращает значение числа, округлённое до ближайшего целого.
- Возвращает знак числа, указывающий, является ли число положительным, отрицательным или нулём.
- Возвращает синус числа.
- Возвращает гиперболический синус числа.
- Возвращает положительный квадратный корень числа.
- Возвращает тангенс числа.
- Возвращает гиперболический тангенс числа.
- Возвращает строку .
- Возвращает целую часть числа, убирая дробные цифры.
Java Math.random Between Two Numbers
The method does not accept any arguments, which means that there is no way to influence the number generated by the method. However, we can create our own method which allows us to generate numbers between a particular range.
For instance, suppose we are building an app that generates the random numbers which will be used to distinguish a customer’s order at a cruise line. These numbers will be added onto the end of a customer’s name.
The number we want to generate should be between 200 and 500. In order to generate this number and prepare the customer’s order reference, we could use this code:
class Main { public static int generateTicketNumber(int min, int max) { int range = (max - min) + 1; return (int)(Math.random() * range) + min; } public static void main(String args[]) { String customerName = "JohnMcIver"; int randomNumber = generateTicketNumber(200, 500); System.out.println(customerName + randomNumber); } }
Our code returns:
In our program, we generate a random number between the range of 200 and 500. Then we append that number to the customer’s name and print out the result to the console.
Let’s break down how our code works:
- We declare a method called which accepts two parameters: min and max.
- uses the min and max parameters to generate a random number within the range of those two numbers with
- When the main program runs, a variable called is declared and is assigned the value .
- Then the method is called and the parameters 200 and 500 are specified, which correspond to the min and max values in the range our result should fall in, respectively. The result of this method is assigned to the variable .
- The customer’s name and the random number generated are concatenated—or merged together—and printed to the console.
Generating Javascript Random Numbers More Easily
is a useful function, but on its own it doesn’t give programmers an easy way to generate pseudo-random numbers for specific conditions. There may be a need to generate random numbers in a specific range that doesn’t start with 0, for example.
Fortunately, there are simple functions that programmers can create to make pseudo-random numbers more manageable. The rest of this section will show you how to create those functions, then put them all together into a single pseudo-random number generator.
Integer Pseudo-Random Numbers Across A Range
In the previous examples, could never create a number at the very top of a specified range. If you wanted a number between 0 and 5, for example, you could get 0-4, but never 5. The solution to this problem, if you’re creating an integer, is adding 1 to the result.
Since floating point numbers in Javascript go out to many decimal places, there isn’t a simple one-number solution to include the maximum possible floating point number in your range unless you want to make shaky assumptions and type a lot of zeroes. Instead, you can use some simple math that also works with integers to get pseudo-random numbers all across your range.
Floating-Point Pseudo-Random Numbers Across A Range
A function that does this for floating point numbers would look almost identical, except that it wouldn’t use :
Floating point numbers remain a little tricky here because by default generates the maximum number of decimal places the Javascript implementation allows. In most circumstances, you probably want to cap your decimal places at 3 or 4 instead of reading the 10 or more that usually creates.
Floating-Point Pseudo-Random Numbers With Specific Decimal Places
The function formats a number with the number of decimal places you specify. To make sure that you don’t accidentally create a string in some Javascript implementations, it’s best to always chain with the function.
Putting It All Together
Putting all of this together, a Javascript pseudo-random number generator that can create integers or floating point numbers with any number of decimal places could look like this. (Note that this implementation also includes error checking for the parameters.)
Window
Window Location
hash
host
hostname
href
origin
pathname
port
protocol
search
assign()
reload()
replace()
Window Navigator
appCodeName
appName
appVersion
cookieEnabled
geolocation
language
onLine
platform
product
userAgent
javaEnabled()
taintEnabled()
Window Screen
availHeight
availWidth
colorDepth
height
pixelDepth
width
Window Methods
closed
console
defaultStatus
document
frameElement
frames
history
innerHeight
innerWidth
length
localStorage
location
name
navigator
opener
outerHeight
outerWidth
pageXOffset
pageYOffset
parent
screen
screenLeft
screenTop
screenX
screenY
sessionStorage
self
status
top
alert()
atob()
blur()
btoa()
clearInterval()
clearTimeout()
close()
confirm()
focus()
getComputedStyle()
matchMedia()
moveBy()
moveTo()
open()
print()
prompt()
resizeBy()
resizeTo()
scrollBy()
scrollTo()
setInterval()
setTimeout()
stop()
How to generate random numbers in Java?
We can use the static method of the Math class to generate random numbers in Java.
1 | publicstaticdoublerandom() |
This method returns a double number that is greater than or equal to 0.0 and less than 1.0 (Please note that the 0.0 is inclusive while 1.0 is exclusive so that 0 <= n < 1)
a) How to generate a random number between 0 and 1?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
packagecom.javacodeexamples.mathexamples; publicclassGenerateRandomNumberExample{ publicstaticvoidmain(Stringargs){ System.out.println(«Random numbers between 0 and 1»); for(inti=;i<10;i++){ System.out.println(Math.random()); } } } |
Output (could be different for you as these are random numbers)
1 2 3 4 5 6 7 8 9 10 11 |
Random numbers between 0 and 1 0.12921328590853476 0.7936354242494305 0.08878870565069197 0.12470497778455492 0.1738593303254422 0.6793228890529989 0.5948655601179271 0.9910316469070309 0.1867838198026388 0.6630122474512686 |
b) Between 0 and 100
It is a fairly easy task to generate random numbers between 0 and 100. Since the method returns a number between 0.0 and 1.0, multiplying it with 100 and casting the result to an integer will give us a random number between 0 and 100 (where 0 is inclusive while 100 is exclusive).
1 2 |
intrandomNumber=(int)(Math.random()*100); System.out.println(«Random Number: «+randomNumber); |
c) Between a specific range
Since the method returns a double value between 0.0 and 1.0, we need to derive a formula so that we can generate numbers in the specific range.
Let’s do that step by step. Suppose you want to generate random numbers between 10 and 20. So the minimum number it should generate is 10 and the maximum number should be 20.
Step 1:
First of all, we need to multiply the method result with the maximum number so that it returns value between 0 to max value (in this case 20) like given below.
1 | intrandomNumber=(int)(Math.random()*20); |
The above statement will return us a random number between 0.0 and 19. That is because multiplying 0.0 – 0.99 with 20 and casting the result back to int will give us the range of 0 to 19.
Step 2:
Step 1 gives us a random number between 0 and 19. But we want a random number starting from 10, not 0. Let’s add that number to the result.
1 | intrandomNumber=10+(int)(Math.random()*20); |
Step 3:
Now the number starts from 10 but it goes up to 30. That is because adding 10 to 0-19 will give us 10-29. So let’s subtract 10 from 20 before the multiplication operation.
1 | intrandomNumber=10+(int)(Math.random()*(20-10)); |
Step 4:
The random number generated by the above formula gives us a range between 10 and 19 (both inclusive). The number range we wanted was between 10 and 20 (both inclusive). So let’s add 1 to the equation.
1 | intrandomNumber=10+(int)(Math.random()*((20-10)+1)); |
A final result is a random number in the range of 10 to 20.
Random Number Generator in Java
There are many ways to generate a random number in java.
- java.util.Random class can be used to create random numbers. It provides several methods to generate random integer, long, double etc.
- We can also use Math.random() to generate a double. This method internally uses Java Random class.
- class should be used to generate random number in multithreaded environment. This class is part of Java Concurrent package and introduced in Java 1.7. This class has methods similar to Java Random class.
- can be used to generate random number with strong security. This class provides a cryptographically strong random number generator. However, it’s slow in processing. So depending on your application requirements, you should decide whether to use it or not.
Random Number Generators (RNGs) in the Java platform
For the reasons outlined above, there are actually various different random number generators in the Java platform.
The following random nubmer generators are currently provided in the Java platform «out of the box», with the Random
base class offering the possibility of custom subclasses:
Class | Quality | Speed | Period | When to use |
---|---|---|---|---|
java.util.Random | Low | Medium | 248 |
Legacy uses or for subclassing. The LCG algorithm used by java.lang.Random is a slow, poor-quality It is still the base class if you |
ThreadLocalRandom | Medium | Fast | 264 | This is the general-purpose class to use in most cases, unless you need to guarantee that you are using a specific algorithm, will be working with a very large number of threads or need to be able to set predictable seeds. For more information, see the explanation of ThreadLocalRandom. |
SecureRandom | Very High | Slow | 2160 | Used where you need very high quality or cryptographic strength random numbers. For more information, see explanation of SecureRandom. |
SplittableRandom | Medium | Fast | 264 per instance | Used when a very large number of random numbers need to be generated and/or when large number of separate geneartor instances are needed to perform a joint task, e.g. for a very large number of threads working together or in certain divide-and-conquer algorithms. For more information, see explanation of SplittableRandom. |
At the time of writing, there is a proposal underway (see JEP 356: Enhanced Pseudo-Random
Number Generators) to add further RNG algorithms to the Java platform.
Генерация случайных чисел с помощью класса Math
Чтобы сгенерировать случайное число Java предоставляет класс Math, доступный в пакете java.util. Этот класс содержит статичный метод Math.random(), предназначенный для генерации случайных чисел типа double .
Метод random( ) возвращает положительное число большее или равное 0,0 и меньшее 1,0. При вызове данного метода создается объект генератора псевдослучайных чисел java.util.Random.
Math.random() можно использовать с параметрами и без. В параметрах задается диапазон чисел, в пределах которого будут генерироваться случайные значения.
Пример использования Math.random():
public static double getRandomNumber(){ double x = Math.random(); return x; }
Метод getRandomNumber( ) использует Math.random() для возврата положительного числа, которое больше или равно 0,0 или меньше 1,0 .
Результат выполнения кода:
Double between 0.0 and 1.0: SimpleRandomNumber = 0.21753313144345698
Случайные числа в заданном диапазоне
Для генерации случайных чисел в заданном диапазоне необходимо указать диапазон. Синтаксис:
(Math.random() * ((max - min) + 1)) + min
Разобьем это выражение на части:
- Сначала умножаем диапазон значений на результат, который генерирует метод random().Math.random() * (max — min)возвращает значение в диапазоне , где max не входит в заданные рамки. Например, выражение Math.random()*5 вернет значение в диапазоне , в который 5 не входит.
- Расширяем охват до нужного диапазона. Это делается с помощью минимального значения.
(Math.random() * ( max - min )) + min
Но выражение по-прежнему не охватывает максимальное значение.
Чтобы получить максимальное значение, прибавьте 1 к параметру диапазона (max — min). Это вернет случайное число в указанном диапазоне.
double x = (Math.random()*((max-min)+1))+min;
Существуют различные способы реализации приведенного выше выражения. Рассмотрим некоторые из них.
Случайное двойное число в заданном диапазоне
По умолчанию метод Math.random() при каждом вызове возвращает случайное число типа double . Например:
public static double getRandomDoubleBetweenRange(double min, double max){ double x = (Math.random()*((max-min)+1))+min; return x; }
Вы можете вызвать предыдущий метод из метода main, передав аргументы, подобные этому.
System.out.println("Double between 5.0 and 10.00: RandomDoubleNumber = "+getRandomDoubleBetweenRange(5.0, 10.00));
Результат.
System.out.println("Double between 5.0 and 10.00: RandomDoubleNumber = "+getRandomDoubleBetweenRange(5.0, 10.00));
Случайное целое число в заданном диапазоне
Пример генерации случайного целочисленного значения в указанном диапазоне:
public static double getRandomIntegerBetweenRange(double min, double max){ double x = (int)(Math.random()*((max-min)+1))+min; return x; }
Метод getRandomIntegerBetweenRange() создает случайное целое число в указанном диапазоне. Так как Math.random() генерирует случайные числа с плавающей запятой, то нужно привести полученное значение к типу int. Этот метод можно вызвать из метода main, передав ему аргументы следующим образом:
System.out.println("Integer between 2 and 6: RandomIntegerNumber = "+getRandomIntegerBetweenRange(2,6));
Результат.
Integer between 2 and 6: RandomIntegerNumber = 5
Примечание. В аргументах также можно передать диапазон отрицательных значений, чтобы сгенерировать случайное отрицательное число в этом диапазоне.
Generating Javascript Random Numbers
Javascript creates pseudo-random numbers with the function . This function takes no parameters and creates a random decimal number between 0 and 1. The returned value may be 0, but it will never be 1.
You can use to create whole numbers (integers) or numbers with decimals (floating point numbers). Since creates floating point numbers by default, you can create a random floating point number simply by multiplying your maximum acceptable value by the result from . Therefore, to create a pseudo-random number between 0 and 2.5:
Creating a pseudo-random integer is a little more difficult; you must use the function to round your computed value down to the nearest integer. So, to create a random number between 0 and 10:
Just Show Me the Code
Before I dive into the details, if all you want is the code for generating a random whole number within a set range, use Math.random() with the following formula:
The value for High is the largest random number you would like to generate. The value for low is the smallest random number you would like to generate instead. When you run this code, what you will get is a number that randomly falls somewhere between the bounds specified by High and Low.
Here are some examples:
To make things simple, here is a function you can use instead:
Just call getRandomNumber and pass in the lower and upper bound as arguments:
That’s all there is to generating a random number that falls within a range that you specify.
Extending
You can add your own methods to instances, as such:
var random =newRandom();random.bark=function(){if(this.bool()){return"arf!";}else{return"woof!";}};random.bark();
This is the recommended approach, especially if you only use one instance of .
Or you could even make your own subclass of Random:
functionMyRandom(engine){returnRandom.call(this, engine);}MyRandom.prototype=Object.create(Random.prototype);MyRandom.prototype.constructor= MyRandom;MyRandom.prototype.mood=function(){switch(this.integer(,2)){casereturn"Happy";case1return"Content";case2return"Sad";}};var random =newMyRandom();random.mood();
Or, if you have a build tool are are in an ES6+ environment:
classMyRandomextendsRandom{mood(){switch(this.integer(,2)){casereturn"Happy";case1return"Content";case2return"Sad";}}}constrandom=newMyRandom();random.mood();