Bonjour,
j'ai encore besoin d'aide une derniere fois apres j'arrete promis ^^ de toute façon j'aurais presquefinni mon projet .

j'utlise objet[Math.floor(Math.random() * objet.length)]; plusieurs fois pour générer aléatoirement des lettres d'un tableau mais mon problème, c'est que je souhaite que la lettre selctionnée avant ne soit pas prise en compte dans la prochaine sélection de manière à ce que une lettre apparaisse une seule fois dans le resultat final.

Auriez-vous une petite idée de comment faire svp ?

18 réponses


Lartak
Réponse acceptée

Voici un exemple.

Lartak
Réponse acceptée

C'est normal puisque tu ne fais que incrémenter la variable AA, tu ne peux donc pas faire de comparaison dessus, si tu veux incrémenter et faire une comparaison, il te faut plutôt faire :

var AA = 0;
function maF(maLettre)
{
    AA++;
    if (AA < 9) {
        tab.push(maLettre);
    }
}
Lartak
Réponse acceptée

Dans ce cas là c'est normal étant donné qu'il n'est pas dans la condition.

RIg
Auteur

j'avoue que je sais pas trop comment mi prendre ^^

 tab;

 var alea = tab[Math.floor(Math.random() * tab.length)];
 var alea2 = tab[Math.floor(Math.random() * tab.length)];
 var alea3 = tab[Math.floor(Math.random() * tab.length)];
 var alea4 = tab[Math.floor(Math.random() * tab.length)]; 
 var alea5 = tab[Math.floor(Math.random() * tab.length)];
 var alea6 = tab[Math.floor(Math.random() * tab.length)];
 var alea7 = tab[Math.floor(Math.random() * tab.length)];
 var alea8 = tab[Math.floor(Math.random() * tab.length)];

je me disais que delete tab[area]; pourrait marché mais la difficulté pour moi c'est de supprimer entre chaque alea ...

Bonjour.
Commences par nous montrer le code qui te permet de générer aléatoirement les lettres, de cette manière nous pourrons mieux t'aider.

RIg
Auteur

Voici mon code :
(le tableau tab contient huit lettres que l'utilisateur aura au prealable selectionné à son choix )

tab;

  var alea = tab[Math.floor(Math.random() * tab.length)];
  var alea2 = tab[Math.floor(Math.random() * tab.length)];
  var alea3 = tab[Math.floor(Math.random() * tab.length)];
  var alea4 = tab[Math.floor(Math.random() * tab.length)];
  var alea5 = tab[Math.floor(Math.random() * tab.length)];
  var alea6 = tab[Math.floor(Math.random() * tab.length)];
  var alea7 = tab[Math.floor(Math.random() * tab.length)];
  var alea8 = tab[Math.floor(Math.random() * tab.length)];

 var PSEUDO_FINAL = alea +  alea2 + alea3 + alea4 + alea5 + alea6 + alea7 + alea8 ;
RIg
Auteur

Alors en fait je pensais pouvoir comprendre l'exemple et le ré-adapter mais non desole je n'y parvient pas.

Qu'est-ce que tu ne comprend pas ?
Au lieu de définir 8 variables je n'en défini qu'une sous forme de tableau, je le rempli et je le transforme en chaîne de caractères.
Mais avant d'ajouter une entrée dans le tableau, je vérifie que la lettre récupérée n'existe pas déjà dans le tableau, si c'est le cas je refais appel à la fonction afin qu'une autre lettre soit récupérée.
Ce qui évites des lignes de code inutile et l'utilisation de plusieurs variables au lieu d'une.
Car le problème avec ton code c'est que si d'un coup tu veux alonger ou réduire le nombre de lettres pour la génération, tu vas devoir redéfinir de nouvelles variables ou en supprimer, ce qui n'est pas vraiment optimisé.

RIg
Auteur

d'accord je vais revoir ça avec ton explication.

RIg
Auteur

Si j'ai reussi à comprendre cela devrait marché si je fais de cette maniere pour tout mon code non ? :

 tab;

 var alea = tab[Math.floor(Math.random() * tab.length)];
 var alea2;
   if(alea2 == alea  ){
   alea2 = tab[Math.floor(Math.random() * tab.length)];
  }
RIg
Auteur

ah non ça marche pas...

RIg
Auteur

si je crois que j'ai enfin compris

RIg
Auteur

j'ai effectivement bien compris c'est bon mais un nouveau probleme sauvage est apparu :
j'ai limité la selection a 8 lettres et je pensais que ça fonctionnerai de mettre :

...
var AA =0;

function maF(maLettre) {
if(AA++ <9){
    tab.push(maLettre);
   }

...

mais ça ne limite en rien en fait...

RIg
Auteur

j'ai remplacé :

var tab = [];
var AA =0;

function maF(maLettre) {
 AA++;
    if (AA < 9){
    tab.push(maLettre);
   }

 document.getElementById("affiche").innerHTML += maLettre + " "  ;
 }

et ça marche toujours pas
(j'ai bien fait ctrl +F5 au cas ou se serait un pbm de cache)

et ça marche toujours pas

Que veux-tu dire exactement ?

RIg
Auteur

eh bien le tableau continu de se remplir de lettres en plus des huit voulues .
Ce qui est embetant pour le css

C'est le tableau qui continue à se remplir ou le contenu de ton élément qui a l'ID affiche ?
Car là dans ton code je vois le tableau de la variable tab qui se rempli, mais je ne vois pas où tu l'utilises dans ta fonction.

(j'ai bien fait ctrl +F5 au cas ou se serait un pbm de cache)

De toute façon, lorsque tu modifies un code JavaScript, il te faut raffraichir la page pour que les modifications soient prises en compte.

RIg
Auteur

c'est l'élément ****affiche**** en effet

je l'utilise ds une seconde function^^