गणित। आयामी () स्पष्टीकरण


133

यह एक बहुत ही सरल जावा है (हालांकि संभवतः सभी प्रोग्रामिंग पर लागू होता है) प्रश्न:

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()


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

9
BTW: यह रेंज 0.0 इनक्लूसिव से लेकर 1.0 एक्सक्लूसिव है (आपको एक्टॉल्ली नहीं मिलेगा 1.0 कभी भी) NextInt () का उपयोग करना कहीं बेहतर विकल्प है, न केवल यह सरल है बल्कि बहुत तेज भी है।
बजे पीटर लॉरी

2
उपयोग करना Math.ceilगलत है, यह Math.random()रिटर्न देते समय गलत परिणाम देता है 0
स्टारब्लू

क्या होगा यदि Math.floor 0.029 लौटाता है? हमेशा एक ही कथन के साथ दो अंकों की संख्या कैसे प्राप्त करें?
नायशेल वरदान

जवाबों:


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

randomWithRange(2, 5)10 बार का आउटपुट :

5
2
3
3
2
4
4
4
5
4

सीमाएं समावेशी हैं, अर्थात [2,5], और उपरोक्त उदाहरण की minतुलना maxमें कम होना चाहिए ।

संपादित करें: कोई कोशिश करते हैं और बेवकूफ हो सकता है और उल्टा करने के लिए जा रहा था, तो 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, यह सिर्फ:

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)और चाहते हैं कि यह वापस आ जाए double?
स्वित्ज़

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

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

44

यदि आप 0 से 100 तक की संख्या उत्पन्न करना चाहते हैं, तो आपका कोड इस तरह दिखाई देगा:

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

10 से 20 तक की संख्या उत्पन्न करने के लिए:

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

सामान्य मामले में:

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

(जहां lowerboundसमावेशी और upperboundअनन्य है)।

समावेश या बहिष्करण upperboundआपकी पसंद पर निर्भर करता है। मान लीजिए range = (upperbound - lowerbound) + 1तो upperboundसमावेशी है, लेकिन अगर range = (upperbound - lowerbound)फिर upperboundअनन्य है।

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


2
upperboundअनन्य? मुझे लगता है कि यह समावेशी होगा।
vidit

1
@vidit यह विशिष्ट है

1
आपको नहीं लगता कि आप बड़ी तस्वीर ऊपरी तौर पर प्राप्त कर सकते हैं, जैसा कि उदाहरण में दिया गया है
Teezy7

19

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


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

1

10 से 20 समावेशी के बीच एक संख्या उत्पन्न करने के लिए, आप उपयोग कर सकते हैं java.util.Random

int myNumber = new Random().nextInt(11) + 10

0

यहाँ एक विधि है जो सीमाओं को प्राप्त करती है और एक यादृच्छिक पूर्णांक लौटाती है। यह थोड़ा अधिक उन्नत (पूरी तरह से सार्वभौमिक) है: सीमाएं सकारात्मक और नकारात्मक दोनों हो सकती हैं , और न्यूनतम / अधिकतम सीमाएं किसी भी क्रम में आ सकती हैं।

int myRand(int i_from, int i_to) {
  return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}

सामान्य तौर पर, यह सीमाओं के बीच पूर्ण दूरी पाता है, प्रासंगिक यादृच्छिक मूल्य प्राप्त करता है, और फिर नीचे की सीमा के आधार पर उत्तर को स्थानांतरित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.