"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावा के रैंडम क्लास में बीज सेट करने से वही नंबर क्यों मिलता है?

जावा के रैंडम क्लास में बीज सेट करने से वही नंबर क्यों मिलता है?

2024-11-09 को प्रकाशित
ब्राउज़ करें:160

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

जावा रैंडम नंबर जेनरेशन: बीज सेट करने से वही नंबर क्यों लौटता है?

एक विशिष्ट मान के साथ रैंडम क्लास के बीज को सेट करने के बावजूद, रैंडम नंबर जेनरेटर लगातार वही नंबर लौटा रहा है। आइए देखें कि इस समस्या का कारण क्या हो सकता है।

रैंडम क्लास और सीड इनिशियलाइज़ेशन को समझना

जावा रैंडम क्लास को छद्म-यादृच्छिक संख्याएँ उत्पन्न करने के लिए डिज़ाइन किया गया है। डिफ़ॉल्ट रूप से, यह अपनी आंतरिक घड़ी को बीज मान के रूप में उपयोग करता है, जिससे यह संख्याओं का अपेक्षाकृत अनुमानित अनुक्रम उत्पन्न करता है। अनुक्रम को अनुकूलित करने के लिए, आप setSeed() विधि का उपयोग करके स्पष्ट रूप से एक बीज सेट कर सकते हैं।

बीज एक संख्यात्मक मान है जिसका उपयोग यादृच्छिक संख्या जनरेटर की आंतरिक स्थिति को आरंभ करने के लिए किया जाता है। यह स्थिति उत्पन्न संख्याओं के अनुक्रम को निर्धारित करती है।

समस्या: रैंडम इंस्टेंस को साझा करना

प्रदान किए गए कोड में, आप रैंडम() विधि के भीतर रैंडम का एक नया इंस्टेंस बना रहे हैं। इसका मतलब यह है कि हर बार जब आप रैंडम() को कॉल करते हैं, तो एक नया बीज सेट किया जा रहा है, जो पहले से निर्धारित बीज मान को प्रभावी ढंग से ओवरराइड कर रहा है।

इस समस्या को हल करने के लिए, आपको रैंडम उदाहरण को पूरी कक्षा में साझा करना होगा। एक एकल उदाहरण बनाकर और कक्षा आरंभ होने पर एक बार बीज सेट करके, आप सुनिश्चित करते हैं कि संख्याओं का समान क्रम लगातार उत्पन्न होता है।

अद्यतित कोड

निम्न अद्यतन कोड समस्या का समाधान करता है:

public class Numbers {
    private Random randnum;

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

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

इस अद्यतन कोड में:

  1. रैंडनम नामक एक निजी फ़ील्ड को साझा रैंडम उदाहरण का प्रतिनिधित्व करने के लिए घोषित किया गया है।
  2. रैंडम उदाहरण बनाया गया है और बीज है कंस्ट्रक्टर के भीतर सेट करें, यह सुनिश्चित करते हुए कि क्लास ऑब्जेक्ट बनने पर बीज केवल एक बार प्रारंभ किया गया है।

ये परिवर्तन करके, अब आप अलग-अलग प्राप्त करेंगे आपके प्रोग्राम के विभिन्न हिस्सों से यादृच्छिक() को कॉल करते समय यादृच्छिक संख्याएं, निर्दिष्ट बीज मूल्य का सम्मान करते हुए।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3