मेरे पास कोड का टुकड़ा है जो कुछ यादृच्छिक संख्या उत्पन्न करता है और कंसोल पर प्रिंट करता है। हालाँकि मैं उस पैटर्न के बारे में उत्सुक हूँ जो यह प्रिंट करता है, जैसे कि,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(10)+" ");    
    }
}

परिणाम : 0 1 2 3 4 5 6 7 8 9 - प्रत्येक संख्या नई पंक्ति में।

और अगर आप इस कोड को थोड़ा बदल देते हैं! पसंद,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(11)+" ");    
    }
}

परिणाम : 8 9 2 2 10 3 8 7 0 10 - प्रत्येक संख्या नई पंक्ति में।

0123456789 का क्या कारण है जो बिल्कुल भी यादृच्छिक नहीं है!?

0
TeaCupApp 28 अक्टूबर 2011, 11:48

6 जवाब

सबसे बढ़िया उत्तर

अनुक्रम का कारण यह है कि कोई व्यक्ति अपने अगले तरीकों का उपयोग करके पूर्वानुमेय और दोहराने योग्य अनुक्रमों के साथ रैंडम को प्रेडिक्टेबल बनाकर सॉफ्टवेयर का परीक्षण कर सकता है। जब भी कोई विशेष लंबा बीज पैरामीटर रैंडम कंस्ट्रक्टर के लिए एक पैरामीटर होता है, तो इंस्टेंस्ड रैंडम ऑब्जेक्ट को इसके अगले तरीकों के माध्यम से मूल्यों के समान अनुक्रमों को वापस करना चाहिए। यह java.util.Random की एक जानबूझकर की गई विशेषता है।

Java.util.Random के दो कंस्ट्रक्टर हैं:

Random()

तथा

Random(long seed)

लंबे पूर्णांक बीज के बिना निर्माता छद्म यादृच्छिक संख्या जनरेटर के लिए बीज मान बनाने के लिए सिस्टम समय का उपयोग करता है। रैंडम के कोई भी दो इंस्टेंटेशन एक ही बीज का उपयोग नहीं करेंगे और आपको एक बहुत अच्छा छद्म-यादृच्छिक अनुक्रम मिलना चाहिए। बिना बीज के कंस्ट्रक्टर का उपयोग करने वाला एक रैंडम इंस्टेंटेशन मूल्यों के अप्रत्याशित अनुक्रमों के साथ एक उदाहरण बनाता है जो छद्म-यादृच्छिक होगा।

सीड वैल्यू वाले कंस्ट्रक्टर का उद्देश्य केवल इसके अगले तरीकों का उपयोग करके पूर्वानुमेय अनुक्रमों के साथ रैंडम नियतात्मक बनाना है। एक बीज का विशिष्ट उपयोग सॉफ्टवेयर परीक्षण उद्देश्यों के लिए होता है जहां परिणाम अनुमानित और दोहराने योग्य होने चाहिए। रैंडम का हर उदाहरण जो एक ही लंबे बीज पूर्णांक का उपयोग करता है, हर बार परिणामों का एक ही क्रम बनाएगा। जब आप nextInt(10) विधि का उपयोग करते हुए 10 पूर्णांक मानों में से एक प्राप्त करते हैं, तो आपके द्वारा उपयोग किया जाने वाला विशेष लंबा अनुक्रम 0 1 2 3 4 5 6 7 8 9 बार-बार होने का कारण बनता है। यह और अन्य पूर्वानुमेय अनुक्रम जो हर बार सॉफ़्टवेयर निष्पादित होने पर दोहराए जाने योग्य होते हैं, सॉफ़्टवेयर परीक्षण के लिए बहुत उपयोगी होते हैं और अप्रत्याशित छद्म-यादृच्छिक अनुक्रम बनाने के लिए नहीं होते हैं।

2
Jim 28 जुलाई 2012, 11:51

0123456789 भी यादृच्छिक है, इस मामले में - यह 14235682907 के रूप में आने की संभावना है, जो निस्संदेह नहीं आपको चिंता का कोई कारण देता है।

आपने मूल रूप से एक अस्थायी देखा। अगर आप पहले मामले में अगला 10 नंबर प्रिंट करते हैं, तो वे कोई स्पष्ट आदेश नहीं रख रहे हैं।

यह एक सिक्के को उछालने जैसा है - पैटर्न एचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएचएच के सटीक पैटर्न के रूप में आने की संभावना है; प्रत्येक के आने की संभावना 2 में से 18 है, क्योंकि किसी भी 8 चरणों में इसके गलत होने की 50% संभावना है। लेकिन पहला पैटर्न दिखता है जैसे यह टूटा हुआ है, जबकि दूसरा नहीं है।

10
Jon Skeet 28 अक्टूबर 2011, 11:51

मुझे लगता है कि यह यादृच्छिक है... आप random फ़ंक्शन के लिए एक विशिष्ट बीज का उपयोग कर रहे हैं। आपको अभी-अभी वह बीज मिला है जो आपको क्रम से 0 - 9 अंक देगा।

संपादित करें: जाहिर है, यह एल्गोरिदम है:

Java.util.Random वर्ग लागू करता है जिसे आम तौर पर एक रैखिक सर्वांगसम जनरेटर (LCG) कहा जाता है। एक एलसीजी अनिवार्य रूप से निम्नलिखित रूप का एक सूत्र है: संख्या<उप>i+1 = (एक * संख्या<उप>i + ग) मॉड एम

स्रोत: यहां

7
S.L. Barth 28 अक्टूबर 2011, 11:58

Random वर्ग एक छद्म-यादृच्छिक संख्या जनरेटर है। इस प्रकार यह वास्तव में यादृच्छिक नहीं है, बल्कि इसके बजाय प्रारंभिक बीज मूल्य पर किए गए गणितीय कार्यों पर निर्भर करता है। इस प्रकार, कुछ बीज कुछ निश्चित (संभावित दिलचस्प/मजेदार) अनुक्रम उत्पन्न करेंगे

3
flipchart 28 अक्टूबर 2011, 11:55

एक बीज के साथ यादृच्छिक बनाना एक निश्चित व्यवहार सुनिश्चित करता है। विशेष रूप से, एक ही बीज के साथ यादृच्छिक के दो उदाहरण बनाना, हमेशा समान व्यवहार करेगा। किसी को पता चला (जानवर बल के माध्यम से, मुझे लगता है) कि इस विशेष बीज का उपयोग पहले 10 nextInt (10) के साथ मिलकर, ऐसा प्रतीत होता है कि अनुक्रमित अनुक्रम बनाता है। यह क्रम छद्म-यादृच्छिक अद्यतन पहली रचना है, लेकिन इसे पुन: प्रस्तुत किया जा सकता है। किसी भी चीज को जरा सा भी बदलने से अलग ही परिणाम मिलता है।

2
b.buchhold 28 अक्टूबर 2011, 11:58

रैंडम आपके द्वारा दिए गए बीज पर आधारित होता है, यदि आप सही यादृच्छिक संख्या प्राप्त करना चाहते हैं, तो बीज के रूप में समय कार्यों का उपयोग करें, और आपको वास्तविक यादृच्छिक संख्या श्रृंखला मिल जाएगी।

1
Sajjad Heydari 24 जिंदा 2013, 11:48