Comment savez-vous que ce sont de mauvais chiffres? Le problème avec le hasard, c'est que vous ne pouvez jamais vraiment dire ... i46.tinypic.com/2vw7237.gif
Vous feriez mieux de lire /dev/urandomavec la Fileclasse si vous voulez des nombres aléatoires cryptographiquement forts.
Tour
Qu'en est-il des nombres aléatoires négatifs (doubles)? J'essaie d'implémenter une méthode randomRange qui générerait par exemple de -0,8 à 0,9 ... le résultat serait par exemple -0,32
just_a_dude
2
@just_a_dude qui ressemble à une question parfaite pour stackoverflow. Pensez à créer une nouvelle question :)
Seth Ladd
1
La méthode qui générerait par exemple de -0,8 à 0,9 est simple. Il vous suffit de mapper les valeurs. Votre plage est de 0,8 + 0,9 = 1,7. Donc, si vous mettez rng.nextInt (1700), vous obtiendrez un nombre compris entre 0 et 1700. Divisez par 100 et réduisez -0,8. Signification yourRnd = rng.nextInt (1700) /100.0-0.8. Il y a plus d'options que vous pouvez utiliser comme ne même pas utiliser nextInt mais plutôt doubler 0-1, multiplié par 1,7 et décalé de -0,8
Veljac
28
Vous pouvez y parvenir via Randomun objet de classe random.nextInt(max), qui se trouve dans la dart:mathbibliothèque. La nextInt()méthode nécessite une limite maximale. Le nombre aléatoire commence à partir de 0et la limite maximale elle-même est exclusive.
import'dart:math';Random random =newRandom();int randomNumber = random.nextInt(100);// from 0 upto 99 included
Si vous souhaitez ajouter la limite minimale, ajoutez la limite minimale au résultat
int randomNumber = random.nextInt(90)+10;// from 10 upto 99 included
votre réponse ne comprend-elle pas les nombres de 10 à 109 inclus?
Tim
@Tim merci d'avoir remarqué, je venais de copier le code de la ligne précédente. Résolu.
Samir Rahimy
17
Si vous avez besoin de nombres aléatoires sécurisés par cryptographie (par exemple pour le cryptage) et que vous êtes dans un navigateur, vous pouvez utiliser l' API de cryptographie DOM :
int random(){final ary =newInt32Array(1);
window.crypto.getRandomValues(ary);return ary[0];}
Cela fonctionne dans Dartium, Chrome et Firefox, mais probablement pas dans d'autres navigateurs car il s'agit d'une API expérimentale.
Une API aléatoire sécurisée vient d'être ajoutée à dart:math
newRandom.secure()
dart:mathRandoma ajouté un secureconstructeur renvoyant un générateur aléatoire cryptographiquement sécurisé qui lit à partir de la source d'entropie fournie par l'embedder pour chaque valeur aléatoire générée.
qui délègue à window.crypto.getRandomValues()dans le navigateur et à l'OS (comme urandomsur le serveur)
Cette nouvelle API est disponible en version 1.14-dev ou supérieure.
Seth Ladd du
7
Impossible de commenter car je viens de créer ce compte, mais je voulais m'assurer de souligner que la solution de @ eggrobot78 fonctionne, mais elle est exclusive dans Dart, donc elle n'inclut pas le dernier numéro. Si vous remplacez la dernière ligne par "r = min + rnd.nextInt (max - min + 1);", elle doit également inclure le dernier nombre.
Explication:
max =5;
min =3;Random rnd =newRandom();
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
Une solution alternative pourrait être d'utiliser le code DRandom suivant . Cette classe doit être utilisée avec une graine. Il fournit une interface familière à ce que vous attendez de .NET, il a été porté à partir de Random.cs de mono. Ce code n'est peut-être pas sûr pour la cryptographie et n'a pas été testé statistiquement.
Je viens d'écrire cette petite classe pour générer des nombres aléatoires normaux ... c'était un bon point de départ pour la vérification que je dois faire. (Ces ensembles se répartiront sur une courbe en forme de "cloche".) La graine sera placée au hasard, mais si vous voulez être capable de régénérer un ensemble, vous pouvez simplement passer une graine spécifique et le même ensemble sera généré.
Ensuite, vous pouvez simplement l'utiliser comme ceci pour vérifier la moyenne des ensembles de 1000 nombres générés entre une limite basse et haute. Les valeurs sont stockées dans la classe afin d'être accessibles après l'instanciation.
Permettez-moi de résoudre cette question avec un exemple pratique sous la forme d'une simple application de lancer de dés qui appelle 1 des 6 images de visage de dés au hasard à l'écran lorsque vous appuyez dessus.
déclarez d'abord une variable qui génère des nombres aléatoires (n'oubliez pas d'importer dart.math). Déclarez ensuite une variable qui analyse le nombre aléatoire initial dans les contraintes comprises entre 1 et 6 comme un entier.
Les deux variables sont statiques privées afin d'être initialisées une seule fois. Ce n'est pas une grosse affaire mais ce serait une bonne pratique si vous deviez initialiser tout un tas de nombres aléatoires.
Créez maintenant un widget de détection de gestes avec un ClipRRect en tant qu'enfant pour renvoyer l'une des six images de visage de dés à l'écran lorsque vous appuyez dessus.
Un nouveau nombre aléatoire est généré chaque fois que vous appuyez sur l'écran et ce nombre est référencé pour sélectionner l'image du visage de dés choisie.
Réponses:
Utilisez la
Random
classe dedart:math
:Ce code a été testé avec la machine virtuelle Dart et dart2js, au moment de la rédaction de cet article.
la source
/dev/urandom
avec laFile
classe si vous voulez des nombres aléatoires cryptographiquement forts.Vous pouvez y parvenir via
Random
un objet de classerandom.nextInt(max)
, qui se trouve dans ladart:math
bibliothèque. LanextInt()
méthode nécessite une limite maximale. Le nombre aléatoire commence à partir de0
et la limite maximale elle-même est exclusive.Si vous souhaitez ajouter la limite minimale, ajoutez la limite minimale au résultat
la source
Si vous avez besoin de nombres aléatoires sécurisés par cryptographie (par exemple pour le cryptage) et que vous êtes dans un navigateur, vous pouvez utiliser l' API de cryptographie DOM :
Cela fonctionne dans Dartium, Chrome et Firefox, mais probablement pas dans d'autres navigateurs car il s'agit d'une API expérimentale.
la source
Voici un extrait pour générer une liste de nombres aléatoires
Cela générera une liste de 12 entiers de 0 à 99 (inclus).
la source
Une API aléatoire sécurisée vient d'être ajoutée à
dart:math
qui délègue à
window.crypto.getRandomValues()
dans le navigateur et à l'OS (commeurandom
sur le serveur)la source
Impossible de commenter car je viens de créer ce compte, mais je voulais m'assurer de souligner que la solution de @ eggrobot78 fonctionne, mais elle est exclusive dans Dart, donc elle n'inclut pas le dernier numéro. Si vous remplacez la dernière ligne par "r = min + rnd.nextInt (max - min + 1);", elle doit également inclure le dernier nombre.
Explication:
la source
essayez ceci, vous pouvez contrôler la valeur min / max:
la source
Une solution alternative pourrait être d'utiliser le code DRandom suivant . Cette classe doit être utilisée avec une graine. Il fournit une interface familière à ce que vous attendez de .NET, il a été porté à partir de Random.cs de mono. Ce code n'est peut-être pas sûr pour la cryptographie et n'a pas été testé statistiquement.
la source
Je viens d'écrire cette petite classe pour générer des nombres aléatoires normaux ... c'était un bon point de départ pour la vérification que je dois faire. (Ces ensembles se répartiront sur une courbe en forme de "cloche".) La graine sera placée au hasard, mais si vous voulez être capable de régénérer un ensemble, vous pouvez simplement passer une graine spécifique et le même ensemble sera généré.
S'amuser...
Ensuite, vous pouvez simplement l'utiliser comme ceci pour vérifier la moyenne des ensembles de 1000 nombres générés entre une limite basse et haute. Les valeurs sont stockées dans la classe afin d'être accessibles après l'instanciation.
_swarmii
la source
utilisez cette bibliothèque http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart fourni un bon générateur aléatoire qui, je pense, sera inclus dans le sdk bientôt j'espère qu'il aidera
la source
Pour moi, le moyen le plus simple est de faire:
Merci à l'explication @ adam-singer ici.
la source
ça a marché pour moi
new Random().nextInt(100); // MAX = number
il donnera 0 à 99 nombre aléatoire
Exemple:
la source
Permettez-moi de résoudre cette question avec un exemple pratique sous la forme d'une simple application de lancer de dés qui appelle 1 des 6 images de visage de dés au hasard à l'écran lorsque vous appuyez dessus.
déclarez d'abord une variable qui génère des nombres aléatoires (n'oubliez pas d'importer dart.math). Déclarez ensuite une variable qui analyse le nombre aléatoire initial dans les contraintes comprises entre 1 et 6 comme un entier.
Les deux variables sont statiques privées afin d'être initialisées une seule fois. Ce n'est pas une grosse affaire mais ce serait une bonne pratique si vous deviez initialiser tout un tas de nombres aléatoires.
Créez maintenant un widget de détection de gestes avec un ClipRRect en tant qu'enfant pour renvoyer l'une des six images de visage de dés à l'écran lorsque vous appuyez dessus.
Un nouveau nombre aléatoire est généré chaque fois que vous appuyez sur l'écran et ce nombre est référencé pour sélectionner l'image du visage de dés choisie.
J'espérais que cet exemple a aidé :)
Application de roulage de dés utilisant des nombres aléatoires dans Dart
la source