الوقت/التاريخ الآن هو الثلاثاء أبريل 13, 2021 7:14 am

2 نتيجة بحث عن Random

[Java] الطرق المختلفة لتوليد ارقام عشوائية فى الجافا random number by java

أهلا بكم

الرقم العشوائي يعني رقمًا مختلفًا في كل مرة يتم فيها تنفيذ التطبيق وتوفر [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك فى هذا المقال سوف نتعرف سويا على تلك الطرق و كيفية استخدامها :

الطريقة الاولى : توليد ارقام عشوائية باستخدام الفئة Random

توفر الفئة java.util.Random الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التي يمكن أن تولد أرقام عشوائية فى نطاق رقم معين. حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة ,تبدأ تلك الطريقة بتوليد رقم عشوائي من الرقم 0 حتى الحد الاعلى للرقم العشوائي الذى تم تمريرة اليها .

مثال : أكتب برنامج بلغة الجافا لتوليد ارقام عشوائية فى نطاق الرقم 50

الحل : لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة java.util.Random واستدعاء طريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الخاصة به مع 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم باضافة  الرقم 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50...على النحو التالى :

الكود:

import java.util.Random;

public class test {
 
 public static void main(String[] args) {
 
 
 Random randomGenerator = new Random();
 int randomInt = randomGenerator.nextInt(50) + 1;
 System.out.println("Random number generated is : " + randomInt);
 }
}


المخرجات :
Random number generated is : 29


مثال : أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية فى نطاق الرقم 50

الحل : فى هذا المثال طلب عدد 5 ارقام عشوائية و ليس رقم واحد كما فى المثال السابق لذلك سوف نستخدم حلقة تكرارية لتنفيذ المطلوب على النحو التالى :
الكود:

import java.util.Random;

public class test {
 
 public static void main(String[] args) {
 
 
 Random randomGenerator = new Random();
                for(int i = 0; i < 5; i++) {
                int randomInt = randomGenerator.nextInt(50) + 1;
 System.out.println("Random number generated is : " + randomInt);  
                }
 
 }
}


المخرجات :

Random number generated is : 20
Random number generated is : 26
Random number generated is : 44
Random number generated is : 7
Random number generated is : 3


الطريقة الثانية : توليد ارقام عشوائية باستخدام الفئة Math

يحتوي الفئة java.lang.Math على الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الذي يولد قيمة عشرية من النوع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أكبر من 0.0 وأقل من 1.0 (0.9999) ، اذن النطاق الافتراضي لهذه الطريقة 0.0 حتى 1.0

مثال : أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية

الحل :
الكود:

public class test {
 
 public static void main(String[] args) {
 
 
 
                for(int i = 0; i < 5; i++) {
                double randomDouble = Math.random();
 System.out.println("Random number generated is : " + randomDouble);  
               }
 
 }
}


المخرجات :

Random number generated is : 0.5399298565634371
Random number generated is : 0.3914851406177742
Random number generated is : 0.6582928867493553
Random number generated is : 0.02994586334518179
Random number generated is : 0.13342139597089198

وعلى الرغم من ان الطريقة اعلاه لها نطاق محدد لتوليد ارقام عشوائية باستخدامها الا انه يمكنك ضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار الذى تريدة وهذا يجعل نطاقها من 0.0 حتى الرقم الذى وضعته

مثال :أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية فى نطاق الرقم 50 باستخدام Math.random

الحل :من أجل توليد رقم يتراوح بين 1 إلى 50 ، نضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار 50. وهذا يجعل نطاقها من 0.0 إلى 49.995 على النحو التالى :

الكود:

public class test {
 
 public static void main(String[] args) {
 
 
 
                for(int i = 0; i < 5; i++) {
                double randomDouble = Math.random()*50;
 System.out.println("Random number generated is : " + randomDouble);     
               }
 
 }
}


المخرجات :


Random number generated is : 36.098268352442915
Random number generated is : 37.77195830913475
Random number generated is : 46.46593180334226
Random number generated is : 3.1068847461841855
Random number generated is : 49.468128176594774


ولكن النتيجة السابقة ليست صحيحة 100% لانه عند ضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار 50. هذا يجعل نطاقها من 0.0 إلى 49.995 و ليس من 0.0 الى 50
و لحل هذه المشكلة نقوم باضافة الرقم 1. هذا يزيد من نطاقه من 1.0 إلى 50.995. إذا تم إرسال هذه النتيجة إلى متغير من نوع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ، فسيكون النطاق من 1 إلى 50 كما هو ظاهر على النحو التالى :

الكود:

public class test {
 
 public static void main(String[] args) {
 
 
 
                for(int i = 0; i < 5; i++) {
                double randomDouble = Math.random()*50+1;
                int no =( int )randomDouble;
 System.out.println("Random number generated is : " + no);  
               }
 
 }
}


و المخرجات على النحو التالى :

Random number generated is : 27
Random number generated is : 31
Random number generated is : 49
Random number generated is : 20
Random number generated is : 1


الطريقة الثالثة : توليد ارقام عشوائية باستخدام الفئة ThreadLocalRandom

قامت Java 7 بتوفير فئة جديدة تسمى java.util.concurrent.ThreadLocalRandom . يحتوي هذا الفصل على طرق لإنشاء أرقام عشوائية. هذه الفئة مناسبة لتوليد أرقام عشوائية في بيئات متعددة .

ThreadLocalRandom فئة ThreadLocalRandom على أسلوب [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الذي يأخذ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] يمثلان قيم الحدود الدنيا والعليا ويقوم بإرجاع عدد صحيح بين هذه القيم. ستكون النتيجة بين الحد الأدنى  والحد الأعلى .

مثال : لتوليد رقم بين 1 و 50 ، تكون الحدود الدنيا والعليا التي تم تمريرها إلى هذه الطريقة هي 1 و 51 على التوالي.

الكود:

import java.util.concurrent.ThreadLocalRandom;

public class test {
 
 public static void main(String[] args) {
 
 
         for(int i = 0; i < 5; i++) {
   int randomInt = ThreadLocalRandom.current().nextInt(1, 51);
 System.out.println("Random number generated is : " + randomInt);
                  
          }
 
 }
}


المخرجات :

Random number generated is : 20
Random number generated is : 5
Random number generated is : 3
Random number generated is : 26
Random number generated is : 48
من طرف أحمد مناع
في الإثنين فبراير 04, 2019 2:30 pm
 
ابحث في: التعامل مع حزم الجافا java package
موضوع: [Java] الطرق المختلفة لتوليد ارقام عشوائية فى الجافا random number by java
المساهمات: 0
مشاهدة: 1172

حل اسئلة وتمارين بلغة جافا الجزء الثالث

الاخت و الاستاذة الكريمة @زهراء اشكرك والله على مجهودك و نشاطك بالمنتدى فاسمحى لى ان يتم وضعك فى رتبة العضو الشرفى بالمنتدى طالما انك ترفضي الانضمام للادارة.........الاخ الكريم @abushuber اهلا بيك و معذرة فلم استطيع الدخول بالامس

السؤال الثالث : يطلب انشاء برنامج يقوم بتخصيص نقطة ثنائية الأبعاد مع إحداثيات x و y وحساب المسافة من هذه النقطة إلى نقطة أخرى عند الإحداثيات المعينة (x، y)

قبل ان نبدء برمجيا تعال نفهم السؤال رياضيا

يعتبر قانون البعد بين نقطتين أحد قوانين الرياضيات لاحتساب المسافة بين أيّ نقطتين على المستوى الديكارتي، ويُمكن حساب المسافة بين النقطة (س1, ص1) والنقطة (س2, ص2) من خلال الصيغة التالية: المسافة ^2 = (س2 – س1)2 + (ص2 – ص1)2، 

وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))2



ويتم حسابها برمجيا باستخدام المعادلة التالية 

الكود:

dis=Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))





- إنشاء فئة باسم Point وانشاء طريقة بها لاحساب المسافة بين نقطتين على النحو التالى مع شرح كل سطر بالكود :

الكود:


 class Point {
    
   //الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص  
   private int x , y;
  
  
   //مشيد الفئة  من إحداثياتها.
   public Point(int x, int y)
   {
     this.x = x;
     this.y = y;
   }

    
   // عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
   public double distance(int x, int y) {
      int xDiff = this.x - x;
      int yDiff = this.y - y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
   // (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
   public double distance(Point another) {
      int xDiff = this.x - another.x;
      int yDiff = this.y - another.y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
  
}
  



و لتنفيذة الفئة اعلاه فى الدالة الرئيسية على النحو التالى :


الكود:

public class Test {


    public static void main(String[] args) {

            Point p1 = new Point(1, 2); 

      System.out.printf("Distance is: %.2f%n", p1.distance(10, 11));

 
    }




 

المخرجات :
Distance is: 12.73


لكن السؤال لم يكتفى بذلك بل طلب فئة باسم #Circle وإنشاء دائرتين و حساب المسافة بينهما....أذن سنحاول فعل ذلك 

_ حتى استطيع انشاء دائرة لابد من توافر المعلومات التالية :

1_مركز الدائرة على المستوي الاحداثى (x,y) لذلك سوف نستخدم الفئة اعلاه #point التى تقوم بتعين نقطة على المستوى الاحداثى (x ,y)

2_ نصف قطر الدائرة #Radius لذلك سيتم الاعلان عنه كمتغير

و ذلك على النحو التالى :

_ إنشاء الفئة باسم Circle
الكود:

class Circle
{
   // تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
   private Point center;
   private int radius;

  
  
  //منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
  Circle(Point center, int radius) {
   this.center = center;
   this.radius = radius;
}
 

// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
   return center.distance(another.center);
}
}



و يتم استخدام الفئتين السابقتين على النحو التالى :
الكود:

public class Test {
 
    
    public static void main(String[] args) {
        // تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
        Point p1 = new Point(2, 4);
       // تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
        Point p2 = new Point(5, 7);
        
         // إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر  اثنين
        Circle c1 = new Circle(p1, 2);
       //إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر  اثنين
        Circle c2 = new Circle(p2, 2);
        
      //طباعة المسافة بين الدائرتين
       System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
      
    }
    

    
}




و المثال بالكامل على النحو التالى :

الكود:

 class Point {
    
   //الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص  
   private int x , y;
  
  
   //مشيد الفئة  من إحداثياتها.
   public Point(int x, int y)
   {
     this.x = x;
     this.y = y;
   }

    
   // عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
   public double distance(int x, int y) {
      int xDiff = this.x - x;
      int yDiff = this.y - y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
   // (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
   public double distance(Point another) {
      int xDiff = this.x - another.x;
      int yDiff = this.y - another.y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
  
}
  

class Circle
{
   // تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
   private Point center;
   private int radius;

  
  
  //منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
  Circle(Point center, int radius) {
   this.center = center;
   this.radius = radius;
}
 

// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
   return center.distance(another.center);
}
}

public class Test {
 
    
    public static void main(String[] args) {
        // تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
        Point p1 = new Point(2, 4);
       // تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
        Point p2 = new Point(5, 7);
        
         // إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر  اثنين
        Circle c1 = new Circle(p1, 2);
       //إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر  اثنين
        Circle c2 = new Circle(p2, 2);
        
      //طباعة المسافة بين الدائرتين
       System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
      
    }
    

    
}




المخرجات :

The distance between the two circles is: 4.24



السؤال الرابع : يطلب انشاء عدد 2 طريقة لطباعة ارقام عشوائية ضمن نطاق الرقم n ثم ايجاد اكبر قيمة بينهما ...اذن سنفعل الاتى :

1_ طريقة باسم #RandomNum لتوليد ارقام عشوائية فى نطاق الرقم n
2_طريقة اخرى باسم #Stornumbers  لتخزين الارقام العشوائية التى تم توليدها فى مصفوفة
3_ طباعة قيم المصفوفة
4_ ايجاد اكبر رقم فى المصفوفة

الحل :

توفر لغة #Java العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك سوف نستخدم طريقة واحدة وهى باستخدام الطريقة #nextInt التابعة للفئة #Random لتي يمكن أن تولد أرقام عشوائية بين 0 وحدود النطاق المحدد n ....وسيكون الرقم العشوائي الذي يتم إنشاؤه بين 0  وقيمة الحد الأعلى n.
حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة.....و بالتالى لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة #java#.util#.Random واستدعاء طريقة #nextInt الخاصة به مع تمرير الرقم 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم بإضافة 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50

تعال نترجم ذلك برمجيا

1_إنشاء طريقة لتوليد الارقام العشوائية فى نطاق الرقم n

الكود:
static int RandomNum1(int n) {
        
 Random rand = new Random();// انشاء كائن جديد
        int randomInt;// انشاء متغير لتخزين الرقم العشوائى
        randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
        
        
     return randomInt;// ارجاع الارقام العشوائية
        
  }


2_إنشاء مصفوفة و تخزين الارقام العشوائية بها ....لم يحدد السؤال عدد الارقام العشوائية المطلوبة لذلك سنفترض انها 5 ارقام لذلك سوف ننشىء مصفوفة بحجم 5 ارقام
الكود:
static int[] Stornumbers(){
        
        int[] numbers = new int[5]; // تعين حجم المصفوفة
        for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
        numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
    }
            // ارجاع قيمة المصفوفة
          return numbers;
    }


3_ استخدام و تنفيذ الطريقة Stornumbers فى الدالة الرئيسة

الكود:

    public static void main(String[] args) {
        
               int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
               System.out.println("Random number generated is : " + Arrays.toString(printNo));
                
                 int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
                System.out.println("max number is : " + max);
                      
    }


و المثال بالكامل على النحو التالى :

الكود:

import java.util.Arrays;
import java.util.Random;

public class test {

    public static void main(String[] args) {
        
               int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
               System.out.println("Random number generated is : " + Arrays.toString(printNo));
                
                 int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
                System.out.println("max number is : " + max);
                      
    }
    static int RandomNum1(int n) {
        
 Random rand = new Random();// انشاء كائن جديد
        int randomInt;// انشاء متغير لتخزين الرقم العشوائى
        randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
        
        
     return randomInt;// ارجاع الارقام العشوائية
        
  }
    
     static int[] Stornumbers(){
        
        int[] numbers = new int[5]; // تعين حجم المصفوفة
        for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
        numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
    }
    
     // ارجاع قيمة المصفوفة
          return numbers;
    }
    
}


المخرجات :
Random number generated is : [19, 37, 50, 26, 25]
max number is : 50
من طرف أحمد مناع
في الخميس يناير 31, 2019 1:15 pm
 
ابحث في: نقاش و أستفسارات الاعضاء
موضوع: حل اسئلة وتمارين بلغة جافا الجزء الثالث
المساهمات: 28
مشاهدة: 4999

الرجوع الى أعلى الصفحة

انتقل الى: