اعداد تصادفی تولید شده توسط کامپیوتر به دو دسته تقسیم می شوند: اعداد تصادفی واقعی و اعداد شبه تصادفی.
اعداد تصادفی واقعی بر اساس عوامل خارجی تولید می شوند. به عنوان مثال، ایجاد تصادفی با استفاده از نویزهای اطراف.
اما تولید چنین اعداد تصادفی واقعی یک کار زمان بر است. بنابراین، میتوانیم از اعداد شبه تصادفی که با استفاده از یک الگوریتم و یک مقدار دانه تولید میشوند، استفاده کنیم.
این اعداد شبه تصادفی برای اکثر اهداف کافی هستند. به عنوان مثال، می توانید از آنها در رمزنگاری، در ساخت بازی هایی مانند تاس یا کارت ها و در تولید اعداد OTP (گذرواژه یکبار مصرف) استفاده کنید.
در این مقاله نحوه تولید اعداد شبه تصادفی با استفاده از ()Math.random در جاوا را یاد خواهیم گرفت.
استفاده از ()Math.random یک عدد شبه تصادفی از نوع double، بزرگتر یا مساوی صفر و کوچکتر از یک را برمی گرداند.
در زیر مثال استفاده از آن را می بینید :
public static void main(String[] args) { double randomNumber = Math.random(); System.out.println(randomNumber); } // output #1 = 0.5600740702032417 // output #2 = 0.04906751303932033
متغیر randomNumber برای هر اجرا یک عدد تصادفی متفاوت به ما می دهد.
فرض کنید می خواهیم اعداد تصادفی را در یک محدوده مشخص تولید کنیم، مثلاً صفر تا چهار.
// generate random numbers between 0 to 4 public static void main(String[] args) { // Math.random() generates random number from 0.0 to 0.999 // Hence, Math.random()*5 will be from 0.0 to 4.999 double doubleRandomNumber = Math.random() * 5; System.out.println("doubleRandomNumber = " + doubleRandomNumber); // cast the double to whole number int randomNumber = (int)doubleRandomNumber; System.out.println("randomNumber = " + randomNumber); } /* Output #1 doubleRandomNumber = 2.431392914284627 randomNumber = 2 */
وقتی یک double را به int تبدیل می کنیم، مقدار int فقط قسمت عدد کامل را نگه می دارد.
به عنوان مثال، در کد بالا، متغیر doubleRandomNumber برابر است با 2.431392914284627. عدد کامل doubleRandomNumber برابر با 2 است و قسمت کسری آن 431392914284627 می باشد. بنابراین randomNumber تنها عدد کامل 2 را نگه می دارد.
می توانید اطلاعات بیشتری در مورد متد ()Math.random در مستندات جاوا بخوانید.
استفاده از ()Math.random تنها راه برای تولید اعداد تصادفی در جاوا نیست. در مرحله بعد، نحوه تولید اعداد تصادفی را با استفاده از کلاس Random در نظر خواهیم گرفت.
در کلاس Random، ما متدهای نمونه زیادی داریم که اعداد تصادفی را ارائه می کنند. در این بخش، دو روش نمونه را در نظر خواهیم گرفت، nextInt(int bound) و ()nextDouble.
نحوه استفاده از متد nextInt(int bound)
متد nextInt(int bound) یک عدد شبه تصادفی از نوع int، بزرگتر یا مساوی صفر و کمتر از مقدار کران را برمی گرداند. پارامتر Bound کران را مشخص می کند. برای مثال، اگر کران را 4 مشخص کنیم، nextInt(4) مقدار نوع int را برمی گرداند، بزرگتر یا مساوی صفر و کوچکتر از چهار. 0،1،2،3 نتایج احتمالی nextInt(4) هستند.
از آنجایی که این یک متد است، باید یک شی تصادفی برای دسترسی به این متد ایجاد کنیم. بیایید آن را انجام دهیم.
public static void main(String[] args) { // create Random object Random random = new Random(); // generate random number from 0 to 3 int number = random.nextInt(4); System.out.println(number); }
نحوه استفاده از متد ()nextDouble
مشابه ()Math.random ، متد ()nextDouble یک عدد شبه تصادفی double، بزرگتر یا مساوی صفر و کوچکتر از یک را برمی گرداند.
public static void main(String[] args) { // create Random object Random random = new Random(); // generates random number from 0.0 and less than 1.0 double number = random.nextDouble(); System.out.println(number); }
برای اطلاعات بیشتر، می توانید مستندات جاوا درباره کلاس Random را مطالعه کنید.
باید بدانیم که ()Math.random از کلاس Random استفاده می کند. اگر فقط اعداد شبه تصادفی از نوع double را در برنامه خود می خواهیم، می توانیم از ()Math.random استفاده کنیم.
در غیر اینصورت می توانیم از کلاس Random به صورتی استفاده کنیم که برای ما استفاده از انواع داده مختلف مانند ()nextInt و ()nextLong و ()nextFloat و ()nextDouble فراهم می کند.
از خواندن شما سپاسگذارم.
کدنویسی مبارک !