2011-11-01 20 views
97

यह एक बहुत सरल जावा (हालांकि शायद सभी प्रोग्रामिंग के लिए लागू) सवाल यह है:math.random() की व्याख्या की

Math.random() शून्य से एक करने के लिए एक नंबर प्रदान करता है।

मैं सौ शून्य से एक पूर्णांक वापस जाने के लिए चाहते हैं, तो मुझे क्या करना होगा:

(int) Math.floor(Math.random() * 101) 

सौ एक से, मुझे क्या करना होगा:

(int) Math.ceil(Math.random() * 100) 

लेकिन क्या होगा अगर मैं चाहता था इसे तीन से पांच तक करने के लिए? यह निम्न कथन तरह होगा:

(int) Math.random() * 5 + 3 

मैं के बारे में nextInt()java.lang.util.Random में पता है। लेकिन मैं सीखना चाहता हूं कि Math.random() के साथ ऐसा कैसे करें।

+8

बीटीडब्लू: श्रेणी 0.0 से लेकर अनन्य तक 1.0 अनन्य है (आप कभी भी 1.0 प्राप्त नहीं करेंगे) अगलीआईएनटी() का उपयोग करना एक बेहतर विकल्प है, न केवल यह आसान है बल्कि बहुत तेज़ है। –

+1

'Math.ceil' का उपयोग करना गलत है, यह गलत परिणाम देता है जब' Math.random() 'रिटर्न' 0'। – starblue

+0

[3,5] के लिए: '(int) Math.floor (Math.random() * 3) + 3' –

उत्तर

130
int randomWithRange(int min, int max) 
{ 
    int range = (max - min) + 1;  
    return (int)(Math.random() * range) + min; 
} 

आउटपुट:

5 
2 
3 
3 
2 
4 
4 
4 
5 
4 

सीमा, शामिल हैं यानी [2,5], और min ऊपर के उदाहरण में max कम से कम होना चाहिए।

संपादित करें:

int randomWithRange(int min, int max) 
{ 
    int range = Math.abs(max - min) + 1;  
    return (int)(Math.random() * range) + (min <= max ? min : max); 
} 

EDIT2:: अपने प्रश्न double बारे में है के लिए, यह सिर्फ है कोई कोशिश करते हैं और बेवकूफ हो सकता है और min और max उल्टा करने के लिए जा रहा था, तो आप करने के लिए कोड को बदल सकता है :

double randomWithRange(double min, double max) 
{ 
    double range = (max - min);  
    return (Math.random() * range) + min; 
} 

और फिर अगर आप बेवकूफ प्रूफ करने के लिए यह चाहते यह सिर्फ है:

double randomWithRange(double min, double max) 
{ 
    double range = Math.abs(max - min);  
    return (Math.random() * range) + (min <= max ? min : max); 
} 
+1

यदि आप '(int) 'का उपयोग नहीं करते हैं और इसे' डबल 'वापस करना चाहते हैं तो क्या होगा? – switz

+0

यदि आप डबल चाहते हैं तो बस 'int' को 'डबल' के साथ प्रतिस्थापित करें (और टाइपकास्ट अनावश्यक है)। मुझे लगता है कि आप 'int' चाहते थे लेकिन मैं अपनी पोस्ट में जोड़ दूंगा। – AusCBloke

+1

वास्तव में 'डबल' के साथ '+1' को हटाकर 'Math.random()' को छोटा नहीं किया जा रहा है। हालांकि, 'Math.random'' के बाद सीमा [न्यूनतम, अधिकतम) होगी "सकारात्मक संकेत के साथ एक डबल मान देता है, 0.0 से अधिक या बराबर 1.0 और 1.0 से कम।" वैसे भी संभवतः अधिकतम 'अधिकतम' होने का एक बहुत ही कम मौका होगा, भले ही यह संभव हो। – AusCBloke

17

Randomjava.util पैकेज में स्थित जावा का वर्ग आपके उद्देश्य को बेहतर तरीके से पूरा करेगा। इसमें कुछ nextInt() विधियां हैं जो एक पूर्णांक लौटाती हैं। एक इंट तर्क लेने वाला व्यक्ति 0 और उस int के बीच एक संख्या उत्पन्न करेगा, बाद वाला समावेशी नहीं होगा। randomWithRange(2, 5) 10 बार की

+0

मैंने अपना प्रश्न अपडेट किया, मैं जानना चाहता हूं कि इसे 'Math.random()' के साथ कैसे किया जाए। धन्यवाद। – switz

+0

+1 इसे करने के लिए अधिक विश्वसनीय तरीका के लिए। – trashgod

36

आप 0 से 100 के एक नंबर जनरेट करना चाहते हैं तो अपने कोड इस तरह दिखेगा:

(int)(Math.random() * 11 + 10); 

सामान्य में:

(int)(Math.random() * 101); 

10 20 से एक नंबर उत्पन्न करने के लिए मामला:

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound); 

(जहां lowerbound समावेशी और upperbound exclu है sive)।

अप्परडरबाउंड का समावेशन या बहिष्करण आपकी पसंद पर निर्भर करता है। मान लें कि रेंज = (अप्परबाउंड-निचलाबाउंड) +1 फिर उपपरबाउंड समावेशी है।लेकिन यदि रेंज = (अप्परबाउंड-लोअरबाउंड) तो उपपरबाउंड एक्सक्लूसिव है। पूर्व: यदि मैं पूर्णांक बी/डब्ल्यू 3-5 चाहता हूं, तो यदि श्रेणी (5-3) +1 है तो 5 समावेशी है, यदि सीमा केवल (5-3) है तो 5 विशिष्ट है।

+2

'ऊपरीबाउंड 'अनन्य? मुझे लगता है कि यह समावेशी होगा। – vidit

+0

@vidit यह अनन्य है –

संबंधित मुद्दे