ChatGPT解决这个技术问题 Extra ChatGPT

How do I generate random numbers in Dart?

How do I generate random numbers using Dart?

How do you know they're bad numbers? The thing about random is that you can never really tell... i46.tinypic.com/2vw7237.gif
Trust me, you'd know they are bad if you used dart:core Math. :) Here's the bug: code.google.com/p/dart/issues/detail?id=499
If you want to know whether your random numbers are bad, use my ChiSquare library to find out: github.com/kaisellgren/ChiSquare

F
Frank van Puffelen

Use Random class from dart:math:

import 'dart:math';

main() {
  var rng = Random();
  for (var i = 0; i < 10; i++) {
    print(rng.nextInt(100));
  }
}

This code was tested with the Dart VM and dart2js, as of the time of this writing.


You are better off reading /dev/urandom with the File class if you want cryptographically strong random numbers.
How about negative random numbers (doubles)? I'm trying to implement a randomRange method that would generate for example from -0.8 to 0.9 ... the result would be for example -0.32
@just_a_dude that sounds like a perfect question for stackoverflow. Consider creating a new question :)
method that would generate for example from -0.8 to 0.9 is simple. You just need to map values. Your range is 0.8+0.9= 1,7. So if you put rng.nextInt(1700) you will get number between 0 and 1700. Divide by 100 and reduce -0,8. Meaning yourRnd = rng.nextInt(1700)/100.0-0.8. There are more options you can use like not even using nextInt but rather double 0-1, miltiplied by 1,7 and shifted -0.8
new Random.secure() for cryptographically strong random numbers from dart 1.1.4
S
Samir Rahimy

You can achieve it via Random class object random.nextInt(max), which is in dart:math library. The nextInt() method requires a max limit. The random number starts from 0 and the max limit itself is exclusive.

import 'dart:math';
Random random = new Random();
int randomNumber = random.nextInt(100); // from 0 upto 99 included

If you want to add the min limit, add the min limit to the result

int randomNumber = random.nextInt(90) + 10; // from 10 upto 99 included

A
Aymen Dn

try this, you can control the min/max value :

NOTE that you need to import dart math library.

import 'dart:math';

void main() {
  
  int random(min, max) {
    return min + Random().nextInt(max - min);
  }

  print(random(5, 20)); // Output : 19, 5, 15..
}

n
nbro

Here's a snippet for generating a list of random numbers

import 'dart:math';

main() {
  var rng = new Random();
  var l = new List.generate(12, (_) => rng.nextInt(100));
}

This will generate a list of 12 integers from 0 to 99 (inclusive).


G
Günter Zöchbauer

A secure random API was just added to dart:math

new Random.secure()

dart:math Random added a secure constructor returning a cryptographically secure random generator which reads from the entropy source provided by the embedder for every generated random value.

which delegates to window.crypto.getRandomValues() in the browser and to the OS (like urandom on the server)


This new API is available in 1.14-dev or greater.
S
Sam McCall

If you need cryptographically-secure random numbers (e.g. for encryption), and you're in a browser, you can use the DOM cryptography API:

int random() {
  final ary = new Int32Array(1);
  window.crypto.getRandomValues(ary);
  return ary[0];
}

This works in Dartium, Chrome, and Firefox, but likely not in other browsers as this is an experimental API.


D
D V Yogesh

its worked for me new Random().nextInt(100); // MAX = number

it will give 0 to 99 random number

Eample::

import 'dart:math';
int MAX = 100;
print(new Random().nextInt(MAX));`

C
Chad McAdams

Not able to comment because I just created this account, but I wanted to make sure to point out that @eggrobot78's solution works, but it is exclusive in dart so it doesn't include the last number. If you change the last line to "r = min + rnd.nextInt(max - min + 1);", then it should include the last number as well.

Explanation:

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

N
Nzuzo

Let me solve this question with a practical example in the form of a simple dice rolling app that calls 1 of 6 dice face images randomly to the screen when tapped.

first declare a variable that generates random numbers (don't forget to import dart.math). Then declare a variable that parses the initial random number within constraints between 1 and 6 as an Integer.

Both variables are static private in order to be initialized once.This is is not a huge deal but would be good practice if you had to initialize a whole bunch of random numbers.

static var _random = new Random();
static var _diceface = _random.nextInt(6) +1 ;

Now create a Gesture detection widget with a ClipRRect as a child to return one of the six dice face images to the screen when tapped.

GestureDetector(
          onTap: () {
            setState(() {
              _diceface = _random.nextInt(6) +1 ;
            });
          },
          child: ClipRRect(
            clipBehavior: Clip.hardEdge,
            borderRadius: BorderRadius.circular(100.8),
              child: Image(
                image: AssetImage('images/diceface$_diceface.png'),
                fit: BoxFit.cover,
              ),
          )
        ),

A new random number is generated each time you tap the screen and that number is referenced to select which dice face image is chosen.

I hoped this example helped :)

Dice rolling app using random numbers in dart


_random should be _rnd or vice versa
m
mishalhaneef

you can generate by simply in this way there is a class named Random();

you can use that and genrate random numbers

Random objectname = Random();
int number = objectname.nextInt(100);
// it will generate random number within 100.

g
george koller

Just wrote this little class for generating Normal Random numbers... it was a decent starting point for the checking I need to do. (These sets will distribute on a "bell" shaped curve.) The seed will be set randomly, but if you want to be able to re-generate a set you can just pass some specific seed and the same set will generate.

Have fun...

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);

Then you can just use it like this to check the mean of sets of 1000 nums generated between a low and high limit. The values are stored in the class so they can be accessed after instantiation.

_swarmii


a
adam-singer

An alternative solution could be using the following code DRandom. This class should be used with a seed. It provides a familiar interface to what you would expect in .NET, it was ported from mono's Random.cs. This code may not be cryptography safe and has not been statistically tested.


I've used DRandom before. Good lib!
p
pedro_bb7

For me the easiest way is to do:

import 'dart:math';
Random rnd = new Random();
r = min + rnd.nextInt(max - min);
//where min and max should be specified.

Thanks to @adam-singer explanation in here.


A
Abdulrahman Sarmini

This method generates random integer. Both minimum and maximum are inclusive.

Make sure you add this line to your file: import 'dart:math'; Then you can add and use this method:

int randomInt(int min, int max) {
return Random().nextInt(max - min + 1) + min;
}

So if you call randomInt(-10,10) it will return a number between -10 and 10 (including -10 and 10).


k
kaiser avm

use this library http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart provided a good random generator which i think will be included in the sdk soon hope it helps


This is now in the SDK. See my answer above for how to use it.
M
Manoj

Use Dart Generators, that is used to produce a sequence of number or values.

 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--;
     } 
}

R
Ričards Zvagulis

Use class Random() from 'dart:math' library.

import 'dart:math';

void main() {
  int max = 10;
  int RandomNumber = Random().nextInt(max);
  print(RandomNumber);
}

This should generate and print a random number from 0 to 9.


K
Kaushal Zod

one line solution you can directly call all the functions with constructor as well.

import 'dart:math';

print(Random().nextInt(100));