"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يؤدي تعيين البذرة في فئة Java العشوائية إلى إرجاع نفس الرقم؟

لماذا يؤدي تعيين البذرة في فئة Java العشوائية إلى إرجاع نفس الرقم؟

تم النشر بتاريخ 2024-11-09
تصفح:141

Why Does Setting the Seed in Java's Random Class Return the Same Number?

إنشاء أرقام عشوائية في جافا: لماذا يؤدي إعداد البذرة إلى إرجاع نفس الرقم؟

على الرغم من تعيين بذرة الفئة العشوائية بقيمة محددة، فإن منشئ الأرقام العشوائية يعود باستمرار نفس الرقم. دعنا نستكشف الأسباب التي يمكن أن تسبب هذه المشكلة.

فهم الفئة العشوائية وتهيئة البذور

تم تصميم فئة Java Random لإنشاء أرقام عشوائية زائفة. بشكل افتراضي، يستخدم ساعته الداخلية كقيمة أولية، مما يؤدي إلى إنشاء تسلسل من الأرقام يمكن التنبؤ به نسبيًا. لتخصيص التسلسل، يمكنك تعيين بذرة بشكل صريح باستخدام طريقة setSeed().

البذرة هي قيمة عددية تستخدم لتهيئة الحالة الداخلية لمولد الأرقام العشوائية. تحدد هذه الحالة تسلسل الأرقام التي تم إنشاؤها.

المشكلة: مشاركة المثيل العشوائي

في الكود المقدم، أنت تقوم بإنشاء مثيل جديد لـ Random ضمن الأسلوب Random (). هذا يعني أنه في كل مرة تقوم فيها باستدعاء Random()، يتم تعيين بذرة جديدة، مما يؤدي بشكل فعال إلى تجاوز قيمة البذرة المحددة مسبقًا.

لحل هذه المشكلة، تحتاج إلى مشاركة المثيل العشوائي عبر الفصل بأكمله. من خلال إنشاء مثيل واحد وتعيين البذرة مرة واحدة عند تهيئة الفصل، فإنك تضمن إنشاء نفس التسلسل من الأرقام بشكل متسق.

الكود المحدث

الكود المحدث التالي يحل المشكلة:

public class Numbers {
    private Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

في هذا الكود المحدث:

  1. تم الإعلان عن حقل خاص يسمى randnum لتمثيل المثيل العشوائي المشترك.
  2. يتم إنشاء المثيل العشوائي ويتم إنشاء البذرة تم ضبطها داخل المُنشئ، مما يضمن تهيئة البذرة مرة واحدة فقط عند إنشاء كائن الفئة.

من خلال إجراء هذه التغييرات، سوف تحصل الآن على أرقام عشوائية مختلفة عند استدعاء Random() من أجزاء مختلفة من برنامجك، مع احترام القيمة الأولية المحددة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3