Dartを使用して乱数を生成するにはどうすればよいですか?
19 に答える
Random
からのクラスを使用dart:math
:
import 'dart:math';
main() {
var rng = Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
このコードは、この記事の執筆時点で、DartVMとdart2jsでテストされています。
ライブラリにある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
乱数のリストを生成するためのスニペットは次のとおりです
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
これにより、0から99までの12個の整数のリストが生成されます。
安全なランダムAPIが追加されましたdart:math
new Random.secure()
dart:math
Random
secure
生成されたすべてのランダム値に対して、埋め込み機能によって提供されるエントロピーソースから読み取る暗号的に安全なランダムジェネレーターを返すコンストラクターを追加しました。
window.crypto.getRandomValues()
ブラウザとOS(urandom
サーバーなど)に委任します
これを試してください、あなたは最小/最大値を制御することができます:
import 'dart:math';
void main(){
int random(min, max){
return min + Random().nextInt(max - min);
}
print(random(5,20)); // Output : 19, 5, 15..
}
暗号化された安全な乱数(暗号化など)が必要で、ブラウザーを使用している場合は、DOM暗号化APIを使用できます。
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
これはDartium、Chrome、Firefoxで機能しますが、これは実験的なAPIであるため、他のブラウザでは機能しない可能性があります。
このアカウントを作成したばかりなのでコメントできませんが、@ eggrobot78のソリューションが機能することを確認したかったのですが、dart専用であるため、最後の番号は含まれていません。最後の行を「r=min + rnd.nextInt(max --min + 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
それは私のために働いた new Random().nextInt(100); // MAX = number
0から99の乱数を与えます
例::
import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`
この質問を、タップすると6つのサイコロの顔画像の1つをランダムに画面に呼び出す単純なサイコロを振るアプリの形で実際の例を使って解決しましょう。
最初に、乱数を生成する変数を宣言します(dart.mathをインポートすることを忘れないでください)。次に、1〜6の制約内の初期乱数を整数として解析する変数を宣言します。
両方の変数は、一度初期化するために静的プライベートです。これは大したことではありませんが、大量の乱数を初期化する必要がある場合は良い習慣です。
static var _random = new Random();
static var _diceface = _random.nextInt(6) +1 ;
次に、ClipRRectを子としてジェスチャ検出ウィジェットを作成し、タップすると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,
),
)
),
画面をタップするたびに新しい乱数が生成され、その番号が参照されて、選択するサイコロの顔の画像が選択されます。
この例がお役に立てば幸いです:)
この方法で、Random()という名前のクラスを生成することができます。
それを使用して乱数を生成できます
Random objectname = Random();
int number = objectname.nextInt(100);
// it will generate random number within 100.
ノーマル乱数を生成するためのこの小さなクラスを書いたばかりです...それは私が行う必要のあるチェックのためのまともな出発点でした。(これらのセットは「ベル」型の曲線上に分布します。)シードはランダムに設定されますが、セットを再生成できるようにする場合は、特定のシードを渡すだけで同じセットが生成されます。
楽しむ...
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);
次に、このように使用して、下限と上限の間に生成された1000numのセットの平均を確認できます。値はクラスに保存されるため、インスタンス化後にアクセスできます。
_swarmii
別の解決策は、次のコードDRandomを使用することです。このクラスはシードとともに使用する必要があります。これは、.NETで期待されるものへの使い慣れたインターフェイスを提供し、monoのRandom.csから移植されました。このコードは暗号化に対して安全ではない可能性があり、統計的にテストされていません。
私にとって最も簡単な方法は次のことです。
import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.
ここで@adam-singerの説明に感謝します。
Randomクラスで乱数を生成します。オプションで、Randomコンストラクターにシードを提供できます。
var random = Random();
random.nextDouble(); // Between 0.0 and 1.0: [0, 1)
random.nextInt(10); // Between 0 and 9.
ランダムなブール値を生成することもできます。
var random = Random();
random.nextBool(); // true or false
このライブラリを使用してくださいhttp://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dartは、sdkに含まれると思う優れたランダムジェネレーターを提供しました。
一連の数値または値を生成するために使用されるダートジェネレーターを使用します。
main(){
print("Sequence Number");
oddnum(10).forEach(print);
}
Iterable<int> oddnum(int num) sync*{
int k=num;
while(k>=0){
if(k%2==1){
yield k;
}
k--;
}
}
'dart:math'ライブラリのクラスRandom()を使用します。
import 'dart:math';
void main() {
int max = 10;
int RandomNumber = Random().nextInt(max);
print(RandomNumber);
}
これにより、0から9までの乱数が生成されて出力されます。
このメソッドはランダムな整数を生成します。最小値と最大値の両方が含まれます。
この行をファイルに追加してください。import 'dart:math';
次に、次のメソッドを追加して使用できます。
int randomInt(int min, int max) {
return Random().nextInt(max - min + 1) + min;
}
したがって、呼び出すrandomInt(-10,10)
と、-10から10までの数値(-10から10を含む)が返されます。
1行のソリューションでは、コンストラクターを使用してすべての関数を直接呼び出すこともできます。
import 'dart:math';
print(Random().nextInt(100));