Avatar ·

यादृच्छिक स्ट्रिंग वाला कोड "hello world" क्यों आउटपुट करता है?

सभी को नमस्ते! मैं Java में नौसिखिया हूँ और एक अजीब व्यवहार पर ठोकर खाई। मैंने यह कोड लिखा: ```java Random random = new Random(-229985452); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 5; i++) { sb.append((char) ('a' + random.nextInt(26))); } System.out.println(sb.toString()); // "hello" आउटपुट करता है Random random2 = new Random(-147909649); StringBuilder sb2 = new StringBuilder(); for (int i = 0; i < 5; i++) { sb2.append((char) ('a' + random2.nextInt(26))); } System.out.println(sb2.toString()); // "world" आउटपुट करता है ``` मैंने उम्मीद की थी कि हर बार चलाने पर यादृच्छिक स्ट्रिंग्स आउटपुट होंगी। लेकिन यह कोड अलग-अलग मशीनों पर स्थिर रूप से "hello" और "world" प्रिंट करता है। ऐसा क्यों होता है? क्या यह कोई जादू है या Java की विशेषता? मैंने प्रोग्राम को कई बार पुनः चलाया — परिणाम हमेशा एक जैसा होता है। कृपया समझाएँ कि यह कैसे काम करता है। पहले से धन्यवाद! <<>>

छोटा उत्तर: random number generator का seed (बीज)

क्लास java.util.Random एक pseudorandom number generator है जो एक seed का उपयोग करता है। जब आप एक विशिष्ट seed के साथ Random ऑब्जेक्ट बनाते हैं, तो यह हमेशा उसी क्रम में संख्याएँ उत्पन्न करता है। यहाँ, seed -229985452 और -147909649 को विशेष रूप से चुना गया है ताकि पहले पाँच random numbers 'h', 'e', 'l', 'l', 'o' और 'w', 'o', 'r', 'l', 'd' के ASCII मानों के अनुरूप हों। इसलिए, यह कोड हर बार एक ही आउटपुट देता है, चाहे वह किसी भी मशीन पर चले। यह जादू नहीं है, बल्कि pseudorandom sequences की नियतात्मक प्रकृति है।