मैं डार्ट का उपयोग करके यादृच्छिक संख्या कैसे उत्पन्न करूं?
मैं डार्ट का उपयोग करके यादृच्छिक संख्या कैसे उत्पन्न करूं?
जवाबों:
Random
कक्षा का उपयोग करें dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
इस कोड को डार्ट वीएम और dart2js के साथ परीक्षण किया गया था, इस लेखन के समय के रूप में।
/dev/urandom
साथ पढ़ना बेहतर File
समझते हैं।
आप इसे Random
क्लास ऑब्जेक्ट के माध्यम से प्राप्त कर सकते हैं random.nextInt(max)
, जो dart:math
लाइब्रेरी में है। nextInt()
विधि एक अधिकतम सीमा की आवश्यकता है। यादृच्छिक संख्या से शुरू होता है 0
और अधिकतम सीमा स्वयं अनन्य है।
import 'dart:math';
Random random = new Random();
int randomNumber = random.nextInt(100); // from 0 upto 99 included
यदि आप न्यूनतम सीमा जोड़ना चाहते हैं, तो परिणाम में न्यूनतम सीमा जोड़ें
int randomNumber = random.nextInt(90) + 10; // from 10 upto 99 included
यदि आपको क्रिप्टोग्राफिक रूप से सुरक्षित रैंडम नंबर (जैसे एन्क्रिप्शन के लिए) की आवश्यकता है, और आप एक ब्राउज़र में हैं, तो आप DOM कैशोग्राफी का उपयोग कर सकते हैं :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
यह डार्टियम, क्रोम और फ़ायरफ़ॉक्स में काम करता है, लेकिन संभवतः अन्य ब्राउज़रों में नहीं है क्योंकि यह एक प्रयोगात्मक एपीआई है।
यहां यादृच्छिक संख्याओं की सूची बनाने के लिए एक स्निपेट दिया गया है
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
यह 0 से 99 (समावेशी) से 12 पूर्णांकों की सूची तैयार करेगा।
एक सुरक्षित रैंडम एपीआई बस में जोड़ा गया था dart:math
new Random.secure()
dart:math
Random
एकsecure
निर्माता ने एक क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक जनरेटर लौटाया जो कि प्रत्येक उत्पन्न यादृच्छिक मूल्य के लिए एंब्रॉडर द्वारा प्रदान किए गए एन्ट्रापी स्रोत से पढ़ता है।
जो window.crypto.getRandomValues()
ब्राउज़र में और ओएस पर (जैसे urandom
सर्वर पर) प्रतिनिधि करता है
टिप्पणी करने में सक्षम नहीं है क्योंकि मैंने अभी यह खाता बनाया है, लेकिन मैं यह बताना चाहता हूं कि @ eggrobot78 का समाधान काम करता है, लेकिन यह डार्ट में अनन्य है, इसलिए इसमें अंतिम संख्या शामिल नहीं है। यदि आप अंतिम पंक्ति को "r = min + rnd.nextInt (अधिकतम - न्यूनतम + 1)" में बदलते हैं, तो इसमें अंतिम संख्या भी शामिल होनी चाहिए।
स्पष्टीकरण:
max = 5;
min = 3;
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//max - min is 2
//nextInt is exclusive so nextInt will return 0 through 1
//3 is added so the line will give a number between 3 and 4
//if you add the "+ 1" then it will return a number between 3 and 5
एक वैकल्पिक समाधान निम्नलिखित कोड DRandom का उपयोग किया जा सकता है । इस वर्ग का उपयोग बीज के साथ किया जाना चाहिए। यह एक परिचित इंटरफ़ेस प्रदान करता है कि आप .NET में क्या उम्मीद करेंगे, इसे मोनो के रैंडम.क्स से पोर्ट किया गया था। यह कोड क्रिप्टोग्राफी सुरक्षित नहीं हो सकता है और सांख्यिकीय रूप से परीक्षण नहीं किया गया है।
नॉर्मल रैंडम नंबर्स जेनरेट करने के लिए इस छोटी सी क्लास को लिखा ... यह चेकिंग के लिए एक अच्छी शुरुआत थी जो मुझे करने की जरूरत है। (ये सेट "घंटी" के आकार के वक्र पर वितरित करेंगे। बीज को बेतरतीब ढंग से सेट किया जाएगा, लेकिन अगर आप एक सेट को फिर से तैयार करने में सक्षम होना चाहते हैं तो आप बस कुछ विशिष्ट बीज पास कर सकते हैं और एक ही सेट उत्पन्न करेगा।
मज़े करो...
class RandomNormal {
num _min, _max, _sum;
int _nEle, _seed, _hLim;
Random _random;
List _rNAr;
//getter
List get randomNumberAr => _rNAr;
num _randomN() {
int r0 = _random.nextInt(_hLim);
int r1 = _random.nextInt(_hLim);
int r2 = _random.nextInt(_hLim);
int r3 = _random.nextInt(_hLim);
num rslt = _min + (r0 + r1 + r2 + r3) / 4000.0; //Add the OS back in...
_sum += rslt; //#DEBUG ONLY
return( rslt );
}
RandomNormal(this._nEle, this._min, this._max, [this._seed = null]) {
if (_seed == null ) {
Random r = new Random();
_seed = r.nextInt(1000);
}
_hLim = (_max - _min).ceil() * 1000;
_random = new Random(_seed);
_rNAr = [];
_sum = 0;//#DEBUG ONLY
h2("RandomNormal with k: ${_nEle}, Seed: ${_seed}, Min: ${_min}, Max: ${_max}");//#DEBUG ONLY
for(int n = 0; n < _nEle; n++ ){
num randomN = _randomN();
//p("randomN = ${randomN}");
LIST_add( _rNAr, randomN );
}
h3("Mean = ${_sum/_nEle}");//#DEBUG ONLY
}
}
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
फिर आप इसे इस तरह उपयोग कर सकते हैं कि कम और उच्च सीमा के बीच उत्पन्न 1000 अंकों के सेट की जांच करें। मानों को कक्षा में संग्रहीत किया जाता है, ताकि उन्हें तात्कालिकता के बाद एक्सेस किया जा सके।
_swarmii
इस लाइब्रेरी का उपयोग करें http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart ने एक अच्छा यादृच्छिक जनरेटर प्रदान किया, जो मुझे लगता है कि sdk में शामिल होगा जल्द ही आशा है कि यह मदद करता है
मेरे लिए सबसे आसान तरीका है:
import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.
मेरे लिए यह काम किया new Random().nextInt(100); // MAX = number
यह 0 से 99 रैंडम नंबर देगा
Eample ::
import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`
मुझे एक सरल डाइस रोलिंग ऐप के रूप में एक व्यावहारिक उदाहरण के साथ इस प्रश्न को हल करने दें जो 6 डाइस चेहरे की छवियों में से 1 को बेतरतीब ढंग से टैप करने पर स्क्रीन पर कॉल करता है।
पहले एक वेरिएबल घोषित करें जो रैंडम नंबर जेनरेट करता है (डार्टमैथ आयात करना न भूलें)। फिर एक वैरिएबल घोषित करें जो 1 और 6 के बीच बाधाओं के भीतर प्रारंभिक यादृच्छिक संख्या को पूर्णांक के रूप में बताता है।
दोनों वैरिएबल एक बार आरंभिक होने के लिए स्थिर निजी होते हैं। यह बहुत बड़ी बात नहीं है, लेकिन अच्छा होगा यदि आपको रैंडम नंबरों के पूरे समूह को इनिशियलाइज़ करना है।
static var _random = new Random();
static var _diceface = _rnd.nextInt(6) +1 ;
अब टेप के साथ क्लिपरेक्ट के साथ एक जेस्चर डिटेक्शन विजेट बनाएं जब टैप किए जाने पर छह पासा फेस इमेज में से एक को वापस करने के लिए।
GestureDetector(
onTap: () {
setState(() {
_diceface = _rnd.nextInt(6) +1 ;
});
},
child: ClipRRect(
clipBehavior: Clip.hardEdge,
borderRadius: BorderRadius.circular(100.8),
child: Image(
image: AssetImage('images/diceface$_diceface.png'),
fit: BoxFit.cover,
),
)
),
हर बार जब आप स्क्रीन पर टैप करते हैं तो एक नया रैंडम नंबर जेनरेट होता है और उस नंबर का चयन करने के लिए संदर्भित किया जाता है कि कौन सा डाइस फेस इमेज चुना गया है।
मुझे आशा है कि इस उदाहरण से मदद मिली :)