Bagaimana cara menghasilkan angka acak menggunakan Dart?
Bagaimana cara menghasilkan angka acak menggunakan Dart?
Jawaban:
Gunakan Random
kelas dari dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
Kode ini telah diuji dengan VM Dart dan dart2js, pada saat penulisan ini.
/dev/urandom
bersama File
kelas jika Anda menginginkan nomor acak yang kuat secara kriptografis.
Anda dapat mencapainya melalui Random
objek kelas random.nextInt(max)
, yang ada di dart:math
perpustakaan. The nextInt()
Metode membutuhkan batas max. Nomor acak dimulai dari 0
dan batas maksimal itu sendiri bersifat eksklusif.
import 'dart:math';
Random random = new Random();
int randomNumber = random.nextInt(100); // from 0 upto 99 included
Jika Anda ingin menambahkan batas min, tambahkan batas min ke hasil
int randomNumber = random.nextInt(90) + 10; // from 10 upto 99 included
Jika Anda memerlukan nomor acak yang aman secara kriptografik (mis. Untuk enkripsi), dan Anda berada di browser, Anda dapat menggunakan DOM cryptography API :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
Ini berfungsi di Dartium, Chrome, dan Firefox, tetapi kemungkinan tidak di browser lain karena ini adalah API eksperimental.
Berikut potongan untuk membuat daftar nomor acak
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
Ini akan menghasilkan daftar 12 bilangan bulat dari 0 hingga 99 (inklusif).
API acak yang aman baru saja ditambahkan ke dart:math
new Random.secure()
dart:math
Random
menambahkansecure
konstruktor yang mengembalikan generator acak yang aman secara kriptografik yang membaca dari sumber entropi yang disediakan oleh embedder untuk setiap nilai acak yang dihasilkan.
yang didelegasikan ke window.crypto.getRandomValues()
dalam browser dan ke OS (seperti urandom
di server)
Tidak dapat berkomentar karena saya baru saja membuat akun ini, tetapi saya ingin memastikan bahwa solusi @ eggrobot78 berfungsi, tetapi bersifat eksklusif dalam dart sehingga tidak menyertakan nomor terakhir. Jika Anda mengubah baris terakhir menjadi "r = min + rnd.nextInt (max - min + 1);", maka itu harus menyertakan angka terakhir juga.
Penjelasan:
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
Solusi alternatif dapat menggunakan kode DRandom berikut . Kelas ini harus digunakan dengan benih. Ini menyediakan antarmuka yang akrab dengan apa yang Anda harapkan di .NET, itu porting dari Random.cs mono. Kode ini mungkin tidak aman kriptografi dan belum diuji secara statistik.
Baru saja menulis kelas kecil ini untuk menghasilkan angka Acak Normal ... itu adalah titik awal yang layak untuk pemeriksaan yang perlu saya lakukan. (Set ini akan didistribusikan pada kurva berbentuk "lonceng".) Benih akan ditetapkan secara acak, tetapi jika Anda ingin dapat menghasilkan kembali satu set, Anda cukup melewatkan beberapa benih tertentu dan set yang sama akan dihasilkan.
Selamat bersenang-senang...
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);
Kemudian Anda bisa menggunakannya seperti ini untuk memeriksa mean set 1000 nums yang dihasilkan antara batas rendah dan tinggi. Nilai disimpan di kelas sehingga bisa diakses setelah pembuatan instance.
_swarmii
gunakan perpustakaan ini http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart menyediakan generator acak yang bagus yang menurut saya akan dimasukkan ke dalam SDK segera semoga membantu
Bagi saya cara termudah adalah melakukannya:
import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.
Terima kasih untuk penjelasan @ adam-singers di sini.
Izinkan saya menjawab pertanyaan ini dengan contoh praktis dalam bentuk aplikasi pengguliran dadu sederhana yang memanggil 1 dari 6 gambar wajah dadu secara acak ke layar saat diketuk.
pertama-tama deklarasikan variabel yang menghasilkan angka acak (jangan lupa untuk mengimpor dart.math). Kemudian nyatakan variabel yang mengurai bilangan acak awal dalam batasan antara 1 dan 6 sebagai Integer.
Kedua variabel bersifat statis privat agar dapat diinisialisasi sekali. Ini bukan masalah besar tetapi akan menjadi praktik yang baik jika Anda harus menginisialisasi sejumlah besar angka acak.
static var _random = new Random();
static var _diceface = _rnd.nextInt(6) +1 ;
Sekarang buat widget Deteksi gerakan dengan ClipRRect sebagai anak untuk mengembalikan salah satu dari enam gambar wajah dadu ke layar saat diketuk.
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,
),
)
),
Nomor acak baru dibuat setiap kali Anda mengetuk layar dan nomor itu direferensikan untuk memilih gambar wajah dadu mana yang dipilih.
Saya harap contoh ini membantu :)