logo

Java'da Rastgele Sayı Nasıl Oluşturulur

İçinde Java programlama, sıklıkla yapmamız gerekiyordu rastgele sayılar üret uygulamalar geliştirirken. Birçok uygulamanın özelliği var sayıları rastgele oluştur Kullanıcıyı doğrulamak gibi birçok uygulamanın kullandığı OTP . Rastgele sayılara en iyi örnek zarlardır. Çünkü attığımızda 1'den 6'ya kadar rastgele bir sayı elde ediyoruz.

Bu bölümde a'nın ne olduğunu öğreneceğiz. rastgele sayı Ve rastgele sayılar nasıl oluşturulur Java .

Rastgele Sayı

Rastgele sayılar, büyük bir sayı kümesi kullanan ve matematiksel algoritmayı kullanarak bir sayı seçen sayılardır. Aşağıdaki iki koşulu karşılar:

  • Üretilen değerler belirli bir aralıkta düzgün bir şekilde dağılmıştır.
  • Mevcut ve geçmiş değerlere dayanarak gelecekteki değeri tahmin etmek imkansızdır.

Java'da Rastgele Sayı Oluşturma

Java'da yöntem ve sınıfları kullanarak rastgele sayılar üretmenin üç yolu vardır.

  • Kullanmak rastgele() Yöntem
  • Kullanmak rastgele Sınıf
  • Kullanmak KonuYerelRastgele Sınıf
  • Kullanmak ints() Yöntem (Java 8'de)

Math.random() Yöntemini Kullanma

Java Matematik sınıfın farklı matematiksel işlemler için birçok yöntemi vardır. Bunlardan biri de rastgele() yöntem. Bu bir statik Matematik sınıfının yöntemi. Doğrudan çağırabiliriz. Yalnızca üretir çift rastgele sayı yazın 0,0'dan büyük veya eşit Ve 1,0'dan az . Random() yöntemini kullanmadan önce,java.lang.Mathsınıf.

Sözdizimi:

 public static double random() 

Hiçbir parametreyi kabul etmez. 0,0'dan büyük veya ona eşit ve 1,0'dan küçük bir sözde rastgele double döndürür.

Random() yöntemini kullanarak rastgele sayılar üreten bir program oluşturalım.

RastgeleSayıÖrnek1.java

 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()); } } 

Çıktı:

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

Hatırlamak: Programı her çalıştırdığımızda farklı bir çıktı alıyoruz. Çıktınız yukarıda gösterilen çıktıdan farklı olabilir.

Belirli bir aralık arasında rastgele bir sayı üretmek istiyorsak aşağıdaki formülü de kullanabiliriz.

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

Yukarıdaki formülde minimum değer kapsayıcı, maksimum değer ise hariçtir.

200 ile 400 arasında rastgele sayılar üreten bir program oluşturalım.

javascript tıklamayla

RastgeleSayıÖrnek2.java

 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); } } 

Çıkış 1:

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

Çıkış 2:

 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

Rastgele Sınıfı Kullanma

Rastgele sayı oluşturmanın başka bir yolu da Java rastgele sınıf arasındajava.utilpaket. Sahte rastgele sayılar akışı üretir. Tamsayı, kayan nokta, çift, Boolean, uzun gibi herhangi bir veri türünden rastgele sayıda üretebiliriz. Bu sınıfı rastgele sayılar üretmek için kullanacaksanız aşağıdaki adımları izleyin:

  • İlk önce sınıfı içe aktarınjava.lang.Random.
  • Oluşturduğunuz bir nesne Rastgele sınıfından.
  • Aşağıdaki yöntemlerden herhangi birini çağırın:
  • nextInt(int bağlı) nextInt() nextFloat() nextDouble() sonrakiUzun() sonrakiBoolean()

Yukarıdaki yöntemlerin tümü, bu rastgele sayı üretecinin dizisinden sonraki sözde rastgele, homojen olarak dağıtılmış değeri (karşılık gelen yöntem) döndürür. nextDouble() Ve nextFloat() yöntem 0,0 ile 1,0 arasında rastgele değer üretir.

nextInt(int bağlı) yöntem, pozitif olması gereken bir parametre sınırını (üst) kabul eder. 0 ila sınır-1 aralığında rastgele bir sayı üretir.

Random sınıfını kullanarak rastgele sayılar üreten bir program oluşturalım.

RastgeleSayıÖrnek3.java

 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); } } 

Çıktı:

 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 Sınıfını Kullanma

KonuYerelRastgele sınıf şurada tanımlanırjava.util.concurrentpaket. Math sınıfının rastgele oluşturucusuyla aynı şekilde dahili olarak oluşturulan bir tohumla başlatılır. Değiştirilemez. Bu sınıfı şu şekilde kullanabiliriz:

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

X'in Int, Long vb. olduğu yer.

birleştirme sıralama java

Not: Bir ThreadLocalRandom'ın yanlışlıkla birden fazla iş parçacığıyla paylaşılması mümkün değildir.

Tamsayı, kayan nokta, çift, Boolean, uzun gibi herhangi bir veri türünden rastgele sayıda üretebiliriz. Bu sınıfı rastgele sayılar üretmek için kullanacaksanız aşağıdaki adımları izleyin:

  • İlk önce sınıfı kullanarak içe aktarınjava.util.concurrent.ThreadLocalRandom.
  • Rastgele sayı üretmek istediğiniz ilgili yöntemi çağırın.
  • nextInt() nextDouble() sonrakiUzun() nextFloat() sonrakiBoolean()

Yukarıdaki yöntemlerin tümü, Random sınıfının karşılık gelen yöntemini geçersiz kılar ve karşılık gelen değeri döndürür.

    nextInt(int bağlı) nextDouble(int bağlı) nextLong(int bağlı)

Yukarıdaki yöntemler bir parametreyi ayrıştırır ciltli (üstte) bu olmalı pozitif . 0 (dahil) ile belirtilen sınır (hariç) arasında karşılık gelen rastgele oluşturulmuş değeri döndürür. Fırlatıyor YasadışıTartışmaİstisna sınır negatifse.

    nextInt(int menşei, int bağlı) nextDouble(int menşei, int bağlı) nextLong(int menşei, int bağlı)

Yukarıdaki yöntemler iki parametreyi ayrıştırır Menşei Ve ciltli . Kökeni belirtir en az değer döndürüldü ve sınır şunu belirtir: üst sınır . Belirtilen orijin (dahil) ve sınır (hariç) arasında karşılık gelen rastgele oluşturulmuş değeri döndürür. Ayrıca atar YasadışıTartışmaİstisna orijin sınırdan büyük veya ona eşitse.

Kullanarak rastgele sayılar üreten bir program oluşturalım. ThreadLocalRandom sınıfı .

RastgeleSayıÖrnek4.java

 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); } } 

Çıkış 1:

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

Çıkış 2:

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

Benzer şekilde diğer yöntemleri de kullanabiliriz. ThreadLocalRandomclass .

Java 8'de Rastgele Sayı Üretimi

Java 8'de, ints() yöntemine yeni bir yöntem eklenmiştir. Rastgele sınıf . ithalat yapmalıyızjava.util.RandomYöntemi kullanmadan önce.

ints():

Java dizesi.format

Sahte rastgele int değerleri, nextInt() yönteminin çağrılmasıyla aynı şekilde oluşturulmuştur. Sınırsız bir sözde rastgele int değerleri akışı döndürür.

ints(uzun akışBoyutu):

Yöntem bir parametreyi ayrıştırır akış Boyutu uzun tipte. Üretilecek değer sayısını belirtir. Sahte rastgele int değerleri, nextInt() yönteminin çağrılmasıyla aynı şekilde oluşturulmuştur. Ayrıca rastgele oluşturulmuş int değerlerinin bir akışını da döndürür. Fırlatıyor YasadışıTartışmaİstisna akış boyutu sıfırdan küçükse.

ints(longstreamSize, int randomNumberOrigin, int randomNumberBound):

Parametreler:

    akış Boyutu:Oluşturulacak değer sayısı.rastgeleNumberOrigin:Her rastgele değerin kökenirastgeleNumberBound:Her rastgele değerin sınırı

Belirtilen kökene ve sınıra sahip sözde rastgele int değerlerinin bir akışını döndürür. Fırlatıyor YasadışıTartışmaİstisna eğer:

  • stramSize<0< li>
  • başlangıç ​​> = bağlı
 ints(int randomNumberOrigin, int randomNumberBound): 

Parametreler:

rastgeleNumberOrigin:Her rastgele değerin kökenirastgeleNumberBound:Her rastgele değerin sınırı

Belirtilen kökene ve sınıra sahip sınırsız bir sözde rastgele int değerleri akışı döndürür. Fırlatıyor YasadışıTartışmaİstisna orijin sınırdan büyük veya ona eşitse.

Benzer şekilde, long ve double türlerinin akışını da kullanarak oluşturabiliriz. uzunlar() Ve çiftler() sırasıyla yöntem.

Aşağıdakileri kullanarak bir tamsayı akışı üreten bir program oluşturalım: ints() Random sınıfının yöntemi.

RastgeleSayıÖrnek5.java

 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); } } 

Çıkış 1:

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

Çıkış 2:

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