2012-12-05 36 views
12

संभव डुप्लिकेट:
Java: random long number in 0 <= x < n rangeजावा: एक अंतराल में रैंडम लंबे मूल्य

मैं एक अंतराल में एक यादृच्छिक लंबे मूल्य उत्पन्न करने के लिए चाहते हैं, लेकिन ऐसा लगता है कि रैंडम वर्ग nextLong() nextInt() जैसे तर्क स्वीकार नहीं करता है। यहां मैं क्या कर सकता हूं?

उत्तर

27

आप रेंज आधारित लंबे मूल्यों चाहते हैं तो नीचे दिए गए कार्य करें:

long LOWER_RANGE = 0; //assign lower range value 
long UPPER_RANGE = 1000000; //assign upper range value 
Random random = new Random(); 


long randomValue = LOWER_RANGE + 
          (long)(random.nextDouble()*(UPPER_RANGE - LOWER_RANGE)); 
+1

+1 यह ध्यान देने योग्य है कि रैंडम 48-बिट बीज का उपयोग करता है, इसलिए यह सभी संभव 'डबल' या 'लंबा' उत्पन्न नहीं करेगा। SecureRandom धीमा है लेकिन सभी संभावित मान उत्पन्न करेगा। –

+3

आपने अगली लांग() का उपयोग क्यों नहीं किया? –

1

आप nextInt इस्तेमाल कर सकते हैं लंबे समय के उच्च और निम्न ints उत्पन्न करने के लिए। अपने स्वयं के अगले-विधि के साथ रैंडम-क्लास का विस्तार करना भी संभव है (भले ही रचना अधिक गंभीर प्रोग्रामिंग के लिए एक सुरक्षित विकल्प हो)।

nextInt (int n) के जावाडोक पर एक नज़र डालें। एक अगली लंबी विधि को उसी एल्गोरिदम का उपयोग करके कार्यान्वित किया जा सकता है। इसे सही प्राप्त करना थोड़ा मुश्किल साबित हो सकता है। पेन और पेपर के साथ कुछ गणित करने के लिए तैयार करें। एक सिद्ध लाइब्रेरी का उपयोग करना बुद्धिमान है यदि आप सिर्फ मज़ा के लिए कोडिंग नहीं कर रहे हैं।

+0

यह सही नहीं है; यह अवसर पर एन से बड़े मान वापस करेगा। –

+0

@StefanReich सच है। एन के कम बिट्स को नजरअंदाज कर दिया जाएगा। मैं जवाब संपादित कर दूंगा। –

+0

@StefanReich मैंने खराब उदाहरण हटा दिया। –