আমি কীভাবে ডার্ট ব্যবহার করে এলোমেলো সংখ্যা তৈরি করব?
আমি কীভাবে ডার্ট ব্যবহার করে এলোমেলো সংখ্যা তৈরি করব?
উত্তর:
Random
থেকে ক্লাস ব্যবহার করুন dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
এই লেখার সময় হিসাবে এই কোডটি ডার্ট ভিএম এবং ডার্ট 2 জেসের সাথে পরীক্ষিত হয়েছিল।
/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
আপনার যদি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম সংখ্যার প্রয়োজন হয় (যেমন এনক্রিপশনের জন্য) এবং আপনি একটি ব্রাউজারে থাকেন তবে আপনি ডম ক্রিপ্টোগ্রাফি এপিআই ব্যবহার করতে পারেন :
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
সার্ভারের মতো)
মন্তব্য করতে সক্ষম হচ্ছি না কারণ আমি এই অ্যাকাউন্টটি তৈরি করেছি, তবে আমি নিশ্চিত করতে চেয়েছিলাম যে @ Egrobot78 এর সমাধান কাজ করে তবে এটি ডার্টে একচেটিয়া তাই এটি শেষ সংখ্যাটি অন্তর্ভুক্ত করে না। আপনি যদি শেষ লাইনটি "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- এ কী প্রত্যাশা করবেন এটি একটি পরিচিত ইন্টারফেস সরবরাহ করে, এটি মনোর র্যান্ডম.cs থেকে পোর্ট করা হয়েছিল। এই কোডটি ক্রিপ্টোগ্রাফি নিরাপদ না হতে পারে এবং পরিসংখ্যানগতভাবে পরীক্ষা করা হয়নি।
সাধারণ উত্পন্ন করার জন্য এই ছোট্ট ক্লাসটি লিখেছেন মাত্র র্যান্ডম সংখ্যা ... আমার যা যা করা দরকার তা চেক করার জন্য এটি শালীন সূচনা পয়েন্ট ছিল। (এই সেটগুলি একটি "বেল" আকৃতির বক্ররেখা বিতরণ করবে The) বীজ এলোমেলোভাবে সেট করা হবে তবে আপনি যদি একটি সেট পুনরায় উত্পন্ন করতে সক্ষম হতে চান তবে আপনি কিছু নির্দিষ্ট বীজ পাস করতে পারবেন এবং একই সেটটি উত্পন্ন করবে।
আনন্দ কর...
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 একটি ভাল র্যান্ডম জেনারেটর সরবরাহ করেছে যা আমি মনে করি যে এসডিকে অন্তর্ভুক্ত করা হবে শীঘ্রই আশা করি এটি সাহায্য করে
আমার পক্ষে সবচেয়ে সহজ উপায় হল:
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 ডাইস মুখের চিত্রগুলিকে স্ক্রিনে কল করে।
প্রথমে এমন একটি ভেরিয়েবল ঘোষণা করুন যা এলোমেলো সংখ্যা উত্পন্ন করে (dart.math আমদানি করতে ভুলবেন না)। তারপরে এমন একটি ভেরিয়েবল ঘোষণা করুন যা প্রাথমিক র্যান্ডম সংখ্যাটিকে 1 এবং 6 এর মধ্যে একটি পূর্ণসংখ্যা হিসাবে অন্তর্ভুক্ত করে within
একবারে আরম্ভ করার জন্য উভয় ভেরিয়েবল স্থিতিশীল ব্যক্তিগত। এটি কোনও বিশাল চুক্তি নয় তবে আপনাকে যদি এলোমেলো সংখ্যার পুরো গোছা শুরু করতে হয় তবে এটি ভাল অনুশীলন হবে।
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,
),
)
),
আপনি যখন স্ক্রিনটি ট্যাপ করবেন তখনই একটি নতুন এলোমেলো সংখ্যা তৈরি করা হয় এবং কোন পাশের মুখের চিত্রটি চয়ন করা হয় তা নির্বাচন করার জন্য সেই নম্বরটি উল্লেখ করা হয়।
আমি আশা করি এই উদাহরণটি সাহায্য করেছে :)