ne semble pas trouver une réponse à cela, disons que j'ai ceci: Comment puis-je le faire pour que le nombre aléatoire ne se répète pas. Par exemple, si le nombre aléatoire est 2, je ne veux pas que 2 sortez à nouveau. P> p>
10 Réponses :
Vous pouvez le faire. Avoir une gamme publique de clés que vous avez utilisées et vérifiez-les avec cette fonction: (fonction de: Fonction JavaScript inarray ) p> Alors, ce que vous pouvez faire est: p> Ce code sera coincé après Obtenir les sept chiffres afin que vous ayez besoin de vous assurer qu'il existe une fois que cela les a tous. P> p>
Sûrement que pendant code> la boucle code> n'exécutera jamais, comme vous définissez
m = null code> et une des conditions de boucle est
m! = Null code> ou suis-je Manquer quelque chose?
Il y a déjà un inarray () intégré à jQuery
@Jackfranklin, désolé j'ai tapé vite, je l'ai réparé
@Stefan, prob veut des retards ... Oui Oui, j'ai oublié JQuery Inarray Code> Il est utilisé de la même manière que dans mon exemple.
Overkill total. Tout ce dont vous avez besoin est fait = {}; code> et remplacez votre méthode code> in_array code> avec un simple
m in terminé code>, et au lieu de
.push () code> Utiliser
fait [m] = 1; code> Je n'ai pas cependant pas révoqué, cela est toujours la seule solution de travail.
De plus que pendant code> avec la vérification NULL peut être réalisé beaucoup plus simple et plus court avec un
en tant que code> et aucune initialisation du tout.
Pourriez-vous essayer cela,
setInterval(function() { m = Math.floor(Math.random()*7); $('.foo:nth-of-type(' + m + ')').fadeIn(300); }, 300);
Nah qui ne fonctionnera pas, c'était mon erreur dans mon exemple de question désolé. C'est en fait ce que je voulais dire dans la question.
Généralement, mon approche consiste à créer une matrice contenant toutes les valeurs possibles et à:
L'ensemble résultant de numéros contiendra tous vos indices sans répétition. P>
Mieux encore mieux, peut-être quelque chose comme ceci: P>
var numArray = [0,1,2,3,4,5,6]; numArray.shuffle();
Eh bien, je suis approprié coincé, je n'ai pas traité des tableaux à JQuery avant. : ~ |
Le code que vous utilisez pour appeler les fonctions JQuery est déjà JavaScript et il s'agit simplement d'une matrice JavaScript. Tu peux le faire!
Il y a un certain nombre de façons que vous pourriez y parvenir.
solution A: Si la plage de chiffres n'est pas grande (disons moins de 10), vous pouvez simplement garder une trace des chiffres que vous avez déjà générés. Ensuite, si vous générez un duplicata, jetez-le et générez un autre numéro. P>
solution B:
Pré-générer les nombres aléatoires, stockez-les dans un tableau, puis passez dans la matrice. Vous pouvez y accomplir en prenant les numéros solution c:
Gardez une trace des numéros disponibles dans un tableau. Choisissez un nombre aléatoirement. Supprimer le numéro de ladite matrice. P> 1,2, ..., n code> puis mélangez-les. P>
var randnums = [0,1,2,3,4,5,6];
setInterval(function() {
var m = Math.floor(Math.random()*randnums.length);
$('.foo:nth-of-type('+(randnums[m])+')').fadeIn(300);
randnums = randnums.splice(m,1);
}, 300);
+1. J'ai corrigé un bug apparent dans la solution B (modifié index ++ code> sur
randorder [index ++] code>); J'espère que ça va.
Merci, écrit ces choses rapidement sur place :)
Avez-vous copié la fonction shuffle () code> décrite dans le lien que j'ai donné? snippets.dzone.com/posts/show/849 .
shuffle () code> n'est pas une fonction javascript standard. :)
@tskuzzy - Bang sur l'homme, merci beaucoup! Je vais faire beaucoup plus de recherches sur ces réponses plus tard. Aucun point posant et s'appuyant sur d'autres personnes, vous n'obtenez pas de comme ça. Merci!
S'il vous plaît, ne recommandez pas la solution a toujours. Il est sujet à une énorme perte de performances lorsqu'il y a peu de chiffres "non utilisés" et que vous êtes en boucle de quantité obscène de tentatives jusqu'à ce que math.random code> trébuche sur l'un d'entre eux.
J'aime la réponse de Neal Bien que cela mendie pour une certaine récursive. Ici c'est à Java, vous aurez toujours l'idée générale. Notez que vous allez frapper une boucle infinie si vous retirez plus de numéros que Max, j'aurais pu résoudre cela, mais l'avez laissé comme pour la clarté.
EDIT: SAW NEAL a ajouté une boucle tandis que cela fonctionne bien. p>
Désolé, mais votre code est en Java. La question pose la question de JavaScript. Quoi qu'il en soit, +1 pour l'effort :)
Vous semblez vouloir vouloir un nombre aléatoire non répétitif de 0 à 6, similaire à la réponse de Tskuzzy: Il retournera les chiffres 0 à 6 dans l'ordre aléatoire. Lorsque chacun a été dessiné une fois, il recommencera. P> p>
Je voudrais ajouter -
var RecordKeeper = {}; SRandom = function () { currTimeStamp = new Date().getTime(); if (RecordKeeper.hasOwnProperty(currTimeStamp)) { RecordKeeper[currTimeStamp] = RecordKeeper[currTimeStamp] + 1; return currTimeStamp.toString() + RecordKeeper[currTimeStamp]; } else { RecordKeeper[currTimeStamp] = 1; return currTimeStamp.toString() + RecordKeeper[currTimeStamp]; } }
Voici une solution simple, si un peu rudimentaire: si le numéro suivant est identique à celui du dernier moins 1, à moins que le nombre ne soit 0 (zéro) et la définir autre nombre dans votre ensemble (j'ai choisi 7, l'indice le plus élevé). P> J'ai utilisé cette méthode dans la fonction de cycle, car la seule stipulation sur la sélection d'un nombre était de ne pas être identique à la dernière un. P> Pas la solution la plus élégante ou techniquement douée, mais cela fonctionne :) p> p>
Utilisez des ensembles. Ils ont été introduits à la spécification en ES6. Un ensemble est une structure de données qui représente une collection de valeurs uniques, donc let randomSet = new Set();
for (let index = 0; index < 30; index++) {
randomSet.add(Math.floor(Math.random() * 49) + 1)
};
let randomSetToArray = Array.from(randomSet).slice(0,6);
console.log(randomSet);
console.log(randomSetToArray);
Un moyen simple de générer une liste de nombres différents, quelle que soit la taille ou le numéro:
p>
function randomNumber(max) { return Math.floor(Math.random() * max + 1); } const list = [] while(list.length < 10 ){ let nbr = randomNumber(500) if(!list.find(el => el === nbr)) list.push(nbr) } console.log("list",list)
Ne reviens pas du tout ou seulement pour la prochaine fois?
@Gedrox pas sûr de vous suivre?
Est-ce que ça va recevoir des numéros 2> 4> 2> 4 ou vous ne le voulez pas?
@FRROX - C'est le but de cette question lol. À pas b> Recevoir des numéros de double. ;)
Donc, ce que vous voulez réellement, ce n'est pas un nombre aléatoire, mais une séquence de nombres dans un ordre aléatoire? C'est une chose assez différente. Tskuzzy semble avoir la bonne idée à ce sujet.
Créez simplement une piscine de nombres comme une matrice et prenez-en une sur une personne jusqu'à ce qu'elle soit vide.