logo

Како генерисати случајни број у Јави

Ин Јава програмирање, често смо захтевали генерисати случајне бројеве док развијамо апликације. Многе апликације имају функцију да генерисати бројеве насумично , као што је провера корисника да многе апликације користе ОТП . Најбољи пример случајних бројева је коцкица. Јер када га бацимо, добијамо случајни број између 1 и 6.

У овом одељку ћемо научити шта је а случајни број и како генерисати насумичне бројеве у Јава .

Рандом Нумбер

Случајни бројеви су бројеви који користе велики скуп бројева и бирају број помоћу математичког алгоритма. Задовољава следећа два услова:

  • Генерисане вредности су равномерно распоређене у одређеном интервалу.
  • Немогуће је погодити будућу вредност на основу садашњих и прошлих вредности.

Генерисање случајног броја у Јави

У Јави постоји тросмерно генерисање случајних бројева коришћењем метода и класа.

  • Помоћу насумично() Метод
  • Помоћу насумично Класа
  • Помоћу ТхреадЛоцалРандом Класа
  • Помоћу интс() Метод (у Јава 8)

Коришћење методе Матх.рандом().

Тхе Јава Матх класа има много метода за различите математичке операције. Један од њих је насумично() методом. То је статична метода часа Математика. Можемо га директно позвати. Само генерише дупло укуцајте случајни број већи или једнак 0,0 и мање од 1,0 . Пре употребе методе рандом(), морамо да увеземојава.ланг.Матхкласа.

Синтакса:

 public static double random() 

Не прихвата ниједан параметар. Враћа псеудослучајни дупликат који је већи или једнак 0,0 и мањи од 1,0.

Хајде да направимо програм који генерише насумичне бројеве користећи метод рандом().

РандомНумберЕкампле1.јава

 import java.lang.Math; public class RandomNumberExample1 { public static void main(String args[]) { // Generating random numbers System.out.println('1st Random Number: ' + Math.random()); System.out.println('2nd Random Number: ' + Math.random()); System.out.println('3rd Random Number: ' + Math.random()); System.out.println('4th Random Number: ' + Math.random()); } } 

Излаз:

 1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898 

Запамтити: Сваки пут када извршимо програм добијемо другачији излаз. Ваш излаз се може разликовати од резултата приказаног изнад.

Такође можемо користити следећу формулу ако желимо да генеришемо случајни број између одређеног опсега.

 Math.random() * (max - min + 1) + min 

У горњој формули, минимална вредност је инклузивна, док је максимална вредност искључива.

Хајде да направимо програм који генерише насумичне бројеве између 200 и 400.

РандомНумберЕкампле2.јава

 public class RandomNumberExample2 { public static void main( String args[] ) { int min = 200; int max = 400; //Generate random double value from 200 to 400 System.out.println('Random value of type double between '+min+' to '+max+ ':'); double a = Math.random()*(max-min+1)+min; System.out.println(a); //Generate random int value from 200 to 400 System.out.println('Random value of type int between '+min+' to '+max+ ':'); int b = (int)(Math.random()*(max-min+1)+min); System.out.println(b); } } 

Излаз 1:

 Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329 

Излаз 2:

колико година има Пете Давидсон
 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

Коришћење класе Рандом

Други начин за генерисање случајног броја је коришћење Јава насумично класа одјава.утилпакет. Он генерише ток псеудослучајних бројева. Можемо да генеришемо случајни број било ког типа података, као што су цео број, флоат, доубле, Боолеан, лонг. Ако ћете користити ову класу за генерисање случајних бројева, следите доле наведене кораке:

  • Прво увезите класујава.ланг.Рандом.
  • Направите ан објекат класе Рандом.
  • Позовите било коју од следећих метода:
  • нектИнт(инт боунд) нектИнт() нектФлоат() нектДоубле() нектЛонг() нектБоолеан()

Све горе наведене методе враћају следећу псеудослучајну, хомогено распоређену вредност (одговарајући метод) из секвенце генератора случајних бројева. Тхе нектДоубле() и нектФлоат() метода генерише насумичне вредности између 0,0 и 1,0.

Тхе нектИнт(инт боунд) метода прихвата ограничење параметра (горње) које мора бити позитивно. Генерише насумични број у опсегу од 0 до боунд-1.

Хајде да направимо програм који генерише случајне бројеве користећи класу Рандом.

РандомНумберЕкампле3.јава

 import java.util.Random; public class RandomNumberExample3 { public static void main(String args[]) { // creating an object of Random class Random random = new Random(); // Generates random integers 0 to 49 int x = random.nextInt(50); // Generates random integers 0 to 999 int y = random.nextInt(1000); // Prints random integer values System.out.println('Randomly Generated Integers Values'); System.out.println(x); System.out.println(y); // Generates Random doubles values double a = random.nextDouble(); double b = random.nextDouble(); // Prints random double values System.out.println('Randomly Generated Double Values'); System.out.println(a); System.out.println(b); // Generates Random float values float f=random.nextFloat(); float i=random.nextFloat(); // Prints random float values System.out.println('Randomly Generated Float Values'); System.out.println(f); System.out.println(i); // Generates Random Long values long p = random.nextLong(); long q = random.nextLong(); // Prints random long values System.out.println('Randomly Generated Long Values'); System.out.println(p); System.out.println(q); // Generates Random boolean values boolean m=random.nextBoolean(); boolean n=random.nextBoolean(); // Prints random boolean values System.out.println('Randomly Generated Boolean Values'); System.out.println(m); System.out.println(n); } } 

Излаз:

 Randomly Generated Integers Values 23 767 Randomly Generated Double Values 0.37823814494212016 0.998058172671956 Randomly Generated Float Values 0.87804186 0.93880254 Randomly Generated Long Values -4974823544291679198 3650240138416076693 Randomly Generated Boolean Values false true 

Коришћење класе ТхреадЛоцалРандом

Тхе ТхреадЛоцалРандом класа је дефинисана ујава.утил.цонцуррентпакет. Иницијализује се интерно генерисаним семеном, исто као и случајни генератор класе Матх. Не може се модификовати. Ову класу можемо користити на следећи начин:

 ThreadLocalRandom.current().nextX(...) 

Где је Кс Инт, Лонг, итд.

Напомена: Немогуће је случајно делити ТхреадЛоцалРандом са више нити.

Можемо да генеришемо случајни број било ког типа података, као што су цео број, флоат, доубле, Боолеан, лонг. Ако ћете користити ову класу за генерисање случајних бројева, следите доле наведене кораке:

  • Прво увезите класу користећијава.утил.цонцуррент.ТхреадЛоцалРандом.
  • Позовите одговарајући метод за који желите да генеришете бројеве насумично.
  • нектИнт() нектДоубле() нектЛонг() нектФлоат() нектБоолеан()

Све горе наведене методе замењују одговарајући метод класе Рандом и враћају одговарајућу вредност.

    нектИнт(инт боунд) нектДоубле(инт боунд) нектЛонг (инт боунд)

Горе наведене методе анализирају параметар везан (горњи) то мора бити позитивним . Враћа одговарајућу насумично генерисану вредност између 0 (укључиво) и наведене границе (искључиво). То баца ИллегалАргументЕкцетион ако је граница негативна.

    нектИнт(инт оригин, инт боунд) нектДоубле(инт оригин, инт боунд) нектЛонг (инт оригин, инт боунд)

Горе наведене методе анализирају два параметра порекло и везан . Порекло одређује најмању вредност враћено и веза специфицира Горња граница . Враћа одговарајућу насумично генерисану вредност између наведеног порекла (укључиво) и везаног (искључиво). Такође, бацања ИллегалАргументЕкцетион ако је исходиште веће или једнако ограниченом.

Хајде да направимо програм који генерише насумичне бројеве користећи ТхреадЛоцалРандом класа .

РандомНумберЕкампле4.јава

 import java.util.concurrent.ThreadLocalRandom; public class RandomNumberExample4 { public static void main(String args[]) { // Generate random integers between 0 to 999 int a = ThreadLocalRandom.current().nextInt(); int b = ThreadLocalRandom.current().nextInt(); // Print random integer values System.out.println('Randomly Generated Integer Values:'); System.out.println(a); System.out.println(b); // Generate Random double values double c = ThreadLocalRandom.current().nextDouble(); double d = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Randomly Generated Double Values:'); System.out.println(c); System.out.println(d); // Generate random boolean values boolean e = ThreadLocalRandom.current().nextBoolean(); boolean f = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Randomly Generated Boolean Values:'); System.out.println(e); System.out.println(f); } } 

Излаз 1:

 Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true 

Излаз 2:

 Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true 

Слично, можемо користити и друге методе ТхреадЛоцалРандомцласс .

Генерисање случајних бројева у Јави 8

У Јави 8, нови метод интс() је додат у Случајна класа . Морамо да увеземојава.утил.Рандомпре употребе методе.

интс():

Псеудослучајне инт вредности су генерисане исто као и позивање нектИнт() методе. Враћа неограничени ток псеудослучајних инт вредности.

интс (лонг стреамСизе):

Метод анализира параметар стреамСизе типа дуга. Одређује број вредности које треба генерисати. Псеудослучајне инт вредности су генерисане исто као и позивање нектИнт() методе. Такође враћа ток насумично генерисаних инт вредности. То баца ИллегалАргументЕкцептион ако је величина тока мања од нуле.

интс(лонг стреамСизе, инт рандомНумберОригин, инт рандомНумберБоунд):

Параметри:

    стреамСизе:Број вредности за генерисање.рандомНумберОригин:Порекло сваке случајне вредностирандомНумберБоунд:Веза сваке случајне вредности

Враћа ток псеудослучајних инт вредности са наведеним пореклом и границом. То баца ИллегалАргументЕкцептион ако:

  • страмСизе<0< li>
  • порекло > = везано
 ints(int randomNumberOrigin, int randomNumberBound): 

Параметри:

рандомНумберОригин:Порекло сваке случајне вредностирандомНумберБоунд:Веза сваке случајне вредности

Враћа неограничени ток псеудослучајних инт вредности са наведеним пореклом и везан. То баца ИллегалАргументЕкцептион ако је исходиште веће или једнако ограниченом.

Слично, такође можемо да генеришемо ток дугих и двоструких типова коришћењем лонгс() и дупли() метод, респективно.

Хајде да направимо програм који генерише ток целих бројева користећи интс() метод класе Рандом.

РандомНумберЕкампле5.јава

 import java.util.Random; public class RandomNumberExample5 { public static void main(String[] args) { randomInts(5); randomInts(9, 50, 90); //getStreamOfRandomInts(30, 50); } //method that generates a stream of integers having size 5 public static void randomInts(int num) { Random random = new Random(); random.ints(num).forEach(System.out::println); } //method that generates a stream of 9 integers between 50 to 90 public static void randomInts(int num, int origin, int bound) { Random random1 = new Random(); random1.ints(num, origin, bound).forEach(System.out::println); } } 

Излаз 1:

 727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85 

Излаз 2:

 -1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76