IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Faire une random function qui ne se répète pas


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 228
    Points : 101
    Points
    101
    Par défaut Faire une random function qui ne se répète pas
    Bonjour a tous ,

    J'ai coder une mini fonction qui génère un nombre aléatoire et prend en argument le multiplicateur (le nombre que ne doit pas dépasser le random).

    Il peut arriver que ma fonction renvoie deux ou trois fois de suite le même chiffre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var randomNb = function(nb){
    		return Math.floor(Math.random() * (nb + 1));
    	};
    Pouvez vous m'aider svp?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 228
    Points : 101
    Points
    101
    Par défaut
    j'ai tester quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var randomNb = function(nb){
    		var newNumber=0;
    		while(previousRandomNumber == newNumber){
    			newNumber=Math.floor(Math.random() * (nb + 1)); 
    		}
     
    		previousRandomNumber = newNumber;
     
    		return newNumber;
    	};
    previousRandomNumber étant une variable globale initialisée a 0.
    Mais cela ne fonctionne pas .

    Je commence a sécher.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    je ne pige pas trop le paramètre que tu passes ?

    un random est un random.... après tu peux les stockers dans un array et tester si tu as déja retourné le meêm chiffre.

    Mais le principe du random c'est que tu peux avoir dexu fois de suite le même retour

    sinon tu peux faire un array avec le nombre et tu fais un shuffle avant de faire un pop du coup il ne te retourne qu'une fois chaque element de l'array jusqu'à épuisement du stock ...

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Oui, ok pour le stockage des random dans un tableau déclaré en dehors de la fonction et une comparaison du résultat avec le balayage du tableau... mais pour une petite valeur de nb, tu vas vite épuiser les différentes solutions (vu le floor...) et ta fonction ne te renverra plus rien. et si tu mets un do while, ça va mouliner sans rien sortir.
    Curieux comme demande...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 228
    Points : 101
    Points
    101
    Par défaut
    Je ne comprend pas trop ce qui est curieux dans le fait d ene pas vouloir avoir deux fois de suite le meme nombre.
    exemple 1987586254 et pas 1987558625.

    J'ai finalement trouver pourquoi lorsque je stoquait dans une variable global cela ne fonctionnait pas.
    En fait la fonction est appeler deux fois au même moment pour gérer deux truc différents du coup ma variable global se met a jour deux fois de suite et peux retomber sur le même nombre.

    J'ai ajouter un booleen en parametre qui me permet de prendre en compte ou non la variable global.
    Ce n'est surement pas la meilleure solution mais a default d'en avoir une autre pour le moment au moins cela fonctionne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
            //Global random nb
            var uniqueRandoms = [];
     
    	var randomNb = function(nb, checkTwin) {
    		// refill the array if needed
    		if(checkTwin){
    			if (!uniqueRandoms.length) {
    				for (var i = 0; i < nb; i++) {
    					uniqueRandoms.push(i);
    				}
    			}
    			var index = Math.floor(Math.random() * uniqueRandoms.length);
    			var val = uniqueRandoms[index];
     
    			// now remove that value from the array
    			uniqueRandoms.splice(index, 1);
    			return val;
    		}
    		return Math.floor(Math.random() * (nb+1));
    	}

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 228
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Oui, ok pour le stockage des random dans un tableau déclaré en dehors de la fonction et une comparaison du résultat avec le balayage du tableau... mais pour une petite valeur de nb, tu vas vite épuiser les différentes solutions (vu le floor...) et ta fonction ne te renverra plus rien. et si tu mets un do while, ça va mouliner sans rien sortir.
    Curieux comme demande...
    Le but de mon random n'est pas de passer dans les nombre qu'une seule fois mais d’éviter qu'il ne se repettent directement genre 13465547.

    Orphen

  7. #7
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Ok, je pensais que tu voulais toujours des valeurs différentes sans jamais de répétiton. En fait, tu désirais seulement que deux valeurs successives ne se répètent pas...C'est en effet différent.

Discussions similaires

  1. [MySQL] Faire une requete sql qui affiche les ip actifs
    Par Gghizlane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/09/2016, 11h58
  2. Faire une application Java qui s'exécute dans un navigateur Web
    Par ONOMO MARTIN dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 13/02/2016, 11h35
  3. [Débutant] Faire une appli console qui fonctionne en ligne de commande
    Par BasicZX81 dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/12/2013, 19h39
  4. [AJAX] Comment faire une boucle XMLHttpRequest qui marche ?
    Par lancelot_13 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/01/2007, 13h00
  5. [HTML] Image en fond d'un tableau qui ne se répète pas.
    Par yoyot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo