جاوا رینڈم نمبر جنریٹر
جاوا میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز بنانے کا طریقہ سیکھیں۔ تفصیلی وضاحتوں کے ساتھ Random.nextInt(), SecureRandom, ThreadLocalRandom, اور Math.random() کو دریافت کریں۔
جاوا کوڈ ایڈیٹر
جاوا میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز بنانے کا طریقہ سیکھیں۔ تفصیلی وضاحتوں کے ساتھ Random.nextInt(), SecureRandom, ThreadLocalRandom, اور Math.random() کو دریافت کریں۔
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random rand = new Random();
int min = 1;
int max = 100;
int quantity = 5;
System.out.println("Random numbers between " + min + " and " + max + ":");
for (int i = 0; i < quantity; i++) {
int num = rand.nextInt(max - min + 1) + min;
System.out.print(num + " ");
}
}
}
آؤٹ پٹ
یہ براؤزر پیش منظر ہے، Java یا C++ چلانا نہیں۔ قدریں رمز نگاری کے لیے موزوں نہیں۔
مثال کا پیش منظر
java.util.Random کے ساتھ بنیادی رینڈم
Random.nextInt() استعمال کریں تاکہ مخصوص رینج میں بے ترتیب اعداد پیدا کیے جا سکیں۔ یہ جاوا میں عمومی مقصد کے لیے رینڈم نمبر بنانے کا سب سے عام طریقہ ہے۔
کیا آپ کو ایک فوری رینڈم نمبر چاہیے؟
ہمارے آن لائن رینڈم نمبر جنریٹر کو آزما کر فوری نتائج حاصل کریں بغیر کوئی کوڈ لکھے۔
جاوا میں رینڈم نمبر جنریشن کو سمجھنا
جاوا بے ترتیب اعداد پیدا کرنے کے کئی طریقے فراہم کرتا ہے، جو ہر ایک مختلف استعمال کے لیے بہتر بنایا گیا ہے۔ java.util.Random لینیئر کنگروئنشل جنریٹر (LCG) الگورتھم استعمال کرتا ہے، SecureRandom کرپٹوگرافک طور پر مضبوط رینڈم نمبرز فراہم کرتا ہے، ThreadLocalRandom متوازی ایپلیکیشنز کے لیے تھریڈ-سیف جنریشن فراہم کرتا ہے، اور Math.random() رینڈم ڈبلز بنانے کا آسان طریقہ فراہم کرتا ہے۔
java.util.random
java.util.Random تیز رفتار جعلی رینڈم نمبر جنریشن فراہم کرتا ہے جو سیمولیشنز، گیمز، اور عمومی پروگرامنگ کاموں کے لیے موزوں ہے۔ بنیادی استعمال کے لیے تھریڈ سیف ہے۔
سیکیور رینڈم
java.security.SecureRandom پلیٹ فارم مخصوص الگورتھمز (SHA1PRNG، NativePRNG) استعمال کرتا ہے تاکہ سیکیورٹی ایپلیکیشنز کے لیے کرپٹوگرافک طور پر محفوظ رینڈم نمبرز تیار کیے جا سکیں۔
تھریڈ لوکل رینڈم
ThreadLocalRandom مؤثر تھریڈ محفوظ رینڈم نمبر جنریشن فراہم کرتا ہے جو خاص طور پر ملٹی تھریڈڈ ایپلیکیشنز کے لیے ڈیزائن کیا گیا ہے، جس سے تنازعہ اور ہم آہنگی کے بوجھ سے بچا جا سکتا ہے۔
Math.random()
Math.random() ایک سادہ طریقہ ہے جو 0.0 اور 1.0 کے درمیان دوہری قیمت واپس کرتا ہے۔ تیز حساب کتاب کے لیے آسان لیکن دوسرے آپشنز کے مقابلے میں کم لچکدار۔
عام استعمال کے کیسز
گیمنگ اور سیمولیشنز
رینڈم.nextInt() یا تھریڈ لوکل رینڈم کے ذریعے گیم لوپس میں رینڈم ڈائس رولز، کارڈ ڈرا، دشمنوں کے اسپان اور گیم ایونٹس تیار کریں۔
سیکیورٹی اور کرپٹوگرافی
محفوظ پاس ورڈز، API کیز، سیشن ٹوکنز، اور انکرپشن سالٹس SecureRandom کے ذریعے بنائیں تاکہ کرپٹوگرافک طاقت کی بے ترتیبی حاصل کی جا سکے۔
متوازی ایپلیکیشنز
ThreadLocalRandom کو متوازی اسٹریمز اور ملٹی تھریڈڈ ایپلیکیشنز میں استعمال کریں تاکہ تنازعہ سے بچا جا سکے اور کارکردگی بہتر ہو سکے۔
سافٹ ویئر ٹیسٹنگ
رینڈمائزڈ ٹیسٹ ڈیٹا، فز ٹیسٹنگ ان پٹس، اور ایج کیسز بنائیں تاکہ جاوا ایپلیکیشنز میں مضبوط کوڈ کوریج اور بگ ڈیٹیکشن یقینی بنائی جا سکے۔
جاوا میں رینڈم نمبر جنریشن کیسے کام کرتی ہے
Java's java.util.Random class uses a Linear Congruential Generator (LCG) algorithm with a 48-bit seed. It provides a simple way to generate pseudo-random numbers and is synchronized for thread safety.
The SecureRandom class provides cryptographically strong random numbers by using platform-specific implementations. On most systems, it uses the operating system's entropy source or hardware random number generators.
ThreadLocalRandom, introduced in Java 7, is designed for multi-threaded applications. It uses a random number generator that is isolated to the current thread, avoiding synchronization overhead and contention.
عملی تجاویز
صحیح API منتخب کریں
سادہ کیسز کے لیے Random، سیکیورٹی کے لیے SecureRandom، کنکرنٹ ایپس کے لیے ThreadLocalRandom، اور فوری پروٹوٹائپس کے لیے صرف Math.random() استعمال کریں۔ ہر ایک کے مخصوص استعمال کے کیسز ہیں۔
سیکیورٹی کے لیے ہمیشہ SecureRandom استعمال کریں
پاس ورڈز، ٹوکنز، یا کرپٹوگرافک آپریشنز کے لیے کبھی بھی Random یا Math.random() استعمال نہ کریں۔ ہمیشہ SecureRandom استعمال کریں تاکہ مضبوط بے ترتیبی یقینی بنائی جا سکے اور پیش گوئی کے قابل پیٹرنز سے بچا جا سکے۔
کنکرنٹ ایکسیس کے لیے آپٹیمائز کریں
ملٹی تھریڈڈ ایپلیکیشنز میں، ThreadLocalRandom Random کو ہم آہنگ کرنے والے آبجیکٹس کے مقابلے میں نمایاں طور پر تیز ہوتا ہے۔ اسے متوازی اسٹریمز اور بیک وقت کلیکشنز میں استعمال کریں۔
تکنیکی خصوصیات
الگورتھمز
- لینیئر کنگروئنشل جنریٹر (رینڈم کلاس)
- SHA1PRNG یا NativePRNG (SecureRandom)
- تھریڈ لوکل رینڈم (جاوا 7+، رینڈم پر مبنی)
- پیسوڈو-رینڈم ڈبل (Math.random())
کارکردگی کی خصوصیات
- Math.random(): سادہ ڈبلز کے لیے سب سے تیز
- ThreadLocalRandom: بیک وقت رسائی کے لیے بہترین
- رینڈم: اچھا جنرل پرپز، ہم آہنگ اوور ہیڈ
- سیکیور رینڈم: اینٹروپی جمع کرنے کی وجہ سے سست
اکثر پوچھے گئے سوالات
کون سے Java APIs کا احاطہ کیا گیا ہے؟
java.util.Random, SecureRandom, ThreadLocalRandom اور Math.random(), ہر ایک فوکس شدہ مثال کے ساتھ۔
کیا میں مثالوں کو اپنی ضرورت کے مطابق ڈھال سکتا ہوں؟
ہاں۔ پیرامیٹرز پینل میں کم از کم، زیادہ سے زیادہ اور مقدار سیٹ کریں اور فوری طور پر نتائج دیکھنے کے لیے دوڑیں۔
سیکیورٹی کے لیے مجھے کون سا استعمال کرنا چاہیے؟
SecureRandom۔ دیگر APIs پیش گوئی کے قابل ہیں اور انہیں ٹوکنز، کیز یا پاس ورڈز کو بیک نہیں کرنا چاہیے۔
ملٹی تھریڈ کوڈ کے بارے میں کیا خیال ہے؟
ThreadLocalRandom تھریڈز کے درمیان جھگڑے سے گریز کرتا ہے اور متوازی اسٹریمز اور تھریڈ پولز کے اندر معمول کا انتخاب ہے۔
جاوا میں دو اقدار کے درمیان رینڈم نمبر کیسے جنریٹ کریں؟
0 سے لے کر bound-1 تک کی اقدار کے لیے nextInt(bound) کال کریں، اس طرح nextInt(50) سے 0 سے 49 تک نمبر حاصل ہوتے ہیں۔ اپنی مرضی کی رینج کے لیے ایک آفسیٹ شامل کریں: nextInt(10) + 5 سے 5 سے 14 تک نمبر بنتے ہیں۔ Java 17 سے، nextInt(origin, bound) ایک ہی کال میں یہ کام کر دیتا ہے، جس میں origin شامل ہوتا ہے جبکہ bound شامل نہیں ہوتا۔
کیا Math.random() کبھی 1 واپس کر سکتا ہے؟
نہیں۔ Math.random() ایک double ویلیو واپس کرتا ہے جو 0.0 سے شروع ہوتی ہے (0.0 شامل ہے) اور 1.0 تک پہنچتی ہے مگر کبھی 1.0 شامل نہیں ہوتی، یعنی 0.0 یا 0.9999 آ سکتے ہیں مگر 1.0 کبھی نہیں آتا۔ اندرونی طور پر یہ ایک واحد java.util.Random انسٹنس کو کام سونپتا ہے، اس لیے جدید کوڈ میں Random کے میتھڈز کو براہِ راست کال کرنا زیادہ واضح ہوتا ہے۔
ہر بار جب میں اپنا پروگرام چلاتا ہوں تو مجھے وہی رینڈم نمبرز کیوں ملتے ہیں؟
مقررہ سیڈ کے ساتھ بنایا گیا Random، جیسے new Random(42)، ہمیشہ بالکل ایک جیسی ترتیب دوبارہ پیدا کرتا ہے۔ سیڈ آرگیومنت ہٹا دیں تو یہ خود بخود ایک منفرد ویلیو جو System.nanoTime() کے ساتھ ملا کر بنتی ہے، سے سیڈ ہو جاتا ہے۔ مقررہ سیڈ دوبارہ حاصل کیے جا سکنے والے ٹیسٹوں اور ڈیبگنگ کے لیے مفید ہوتے ہیں، مگر انہیں پروڈکشن کوڈ سے دور رکھنا چاہیے۔
ارے یا لسٹ سے کوئی رینڈم عنصر کیسے چنیں؟
ایک انڈیکس جنریٹ کریں اور اُسی پوزیشن کی ویلیو پڑھیں: لسٹ کے لیے list.get(random.nextInt(list.size())) اور ارے کے لیے array[random.nextInt(array.length)]، کیونکہ nextInt(n) کی رینج 0 سے n-1 تک ہوتی ہے۔ متبادل طور پر، Collections.shuffle() ایک ہی پاس میں پوری لسٹ کی ترتیب بے ترتیب کر دیتی ہے، اس لیے ایک shuffle کے دوران کوئی عنصر دہرایا نہیں جاتا۔
حوالہ جات اور وسائل
-
java.util.Random - Official Javadoc
java.util.Random اور اس کے اندرونی LCG طریقہ کار کے لیے Oracle کی سرکاری javadoc۔
-
Linear Congruential Generator - Wikipedia
لینیئر کنگریوشنل جنریٹر الگورتھم جو بہت سے رن ٹائم استعمال کرتے ہیں۔