Dart를 사용하여 어떻게 난수를 생성합니까?
Dart를 사용하여 어떻게 난수를 생성합니까?
답변:
사용 Random
클래스 dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
이 코드는이 작성 시점에 Dart VM 및 dart2js로 테스트되었습니다.
/dev/urandom
와 함께 읽는 것이 좋습니다 File
.
라이브러리에 있는 Random
object 클래스 를 통해이를 달성 할 수 있습니다 . 이 방법에는 최대 제한이 필요합니다. 난수는에서 시작 하고 최대 제한 자체는 배타적입니다.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의 암호화 API를 :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
이는 Dartium, Chrome 및 Firefox에서 작동하지만 실험적인 API이므로 다른 브라우저에서는 작동하지 않을 가능성이 높습니다.
보안 임의 API가 방금 추가되었습니다. dart:math
new Random.secure()
dart:math
Random
secure
생성 된 모든 임의 값에 대해 임 베더가 제공 한 엔트로피 소스에서 읽는 암호화 보안 난수 생성기를 반환 하는 생성자를 추가했습니다 .
window.crypto.getRandomValues()
브라우저와 OS ( urandom
서버에서 와 같이) 에 위임
방금이 계정을 생성했기 때문에 댓글을 달 수 없지만 @ eggrobot78의 솔루션이 작동한다는 점을 지적하고 싶었지만 다트에서 독점적이므로 마지막 번호를 포함하지 않습니다. 마지막 줄을 "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
대체 솔루션은 다음 코드 DRandom을 사용할 수 있습니다 . 이 클래스는 시드와 함께 사용해야합니다. .NET에서 기대할 수있는 친숙한 인터페이스를 제공하며 mono의 Random.cs에서 포팅되었습니다. 이 코드는 암호화 안전하지 않을 수 있으며 통계적으로 테스트되지 않았습니다.
일반 난수 를 생성하기 위해이 작은 클래스를 작성했습니다 . 내가해야하는 검사를위한 적절한 시작점이었습니다. (이 세트는 "종"모양의 곡선에 배포됩니다.) 시드는 무작위로 설정되지만 세트를 다시 생성하려면 특정 시드를 전달하면 동일한 세트가 생성됩니다.
즐기세요 ...
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.
탭하면 6 개의 주사위 얼굴 이미지 중 1 개를 무작위로 화면에 호출하는 간단한 주사위 굴리기 앱 형태의 실용적인 예를 들어이 질문을 해결하겠습니다.
먼저 난수를 생성하는 변수를 선언하십시오 (dart.math를 가져 오는 것을 잊지 마십시오). 그런 다음 1과 6 사이의 제약 조건 내에서 초기 난수를 Integer로 구문 분석하는 변수를 선언합니다.
두 변수는 모두 한 번 초기화되기 위해 정적 전용입니다. 이는 큰 문제는 아니지만 전체 난수를 초기화해야하는 경우 좋은 방법입니다.
static var _random = new Random();
static var _diceface = _rnd.nextInt(6) +1 ;
이제 ClipRRect를 자녀로 사용하여 제스처 감지 위젯을 만들어 6 개의 주사위 얼굴 이미지 중 하나를 탭하면 화면에 반환합니다.
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,
),
)
),
화면을 탭할 때마다 새로운 난수가 생성되고 그 숫자는 선택되는 주사위 얼굴 이미지를 선택하기 위해 참조됩니다.
이 예제가 도움이 되었기를 바랍니다. :)