Valeurs d'un tableau réinitialisées

Fermé
Pronom Messages postés 5 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 27 décembre 2015 - 24 déc. 2015 à 12:57
Pronom Messages postés 5 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 27 décembre 2015 - 27 déc. 2015 à 12:57
Bonjour,

Je suis débutant en javascript et j'ai un tableau dont les valeurs sont indéfinie en dehors de la boucle ou il les récupères. J'ai rajouté des commentaires dans le code pour que vous voyez ou est le problème.

var tab = new Array;
var i=0;
var difficulte= 3;
var temps = 1000;
var choix= new Array;

var getrand= function(){
		return Math.floor(Math.random() *9);					
	}
	
for (var counter = 0; counter < difficulte; counter++) {
	setTimeout(function(){	
		i = getrand();
		carre[i].css("border","3px solid black");
		tab[counter]=i;
		setTimeout(function(){	
			carre[i].css("border-width","0px");
			alert(tab[counter]);
/*A ce point du code et jusqu'à la fin de la boucle les valeurs sont bien insérées dans le tableau*/
			getrand();
		},1000);
	},temps);
	temps+=2000;
}

$(".carre").click(function() {
   var myClass = $(this).attr("class");
		switch (myClass){
			case "carre cun":
				choix[j] = 0;
				break;
			case "carre cdeux":
				choix[j] = 1;
				break;
			case "carre ctrois":
				choix[j] = 2;
				break;
			case "carre cquatre":
				choix[j] = 3;
				break;
			case "carre ccinq":
				choix[j] = 4;
				break;
			case "carre csix":
				choix[j] = 5;
				break;
			case "carre csept":
				choix[j] = 6;
				break;
			case "carre chuit":
				choix[j] = 7;
				break;
			case "carre cneuf":
				choix[j] = 8;
				break;
			default : 
				alert("Faux");
		}
		j++;
	});
	
setTimeout(function(){
	for (var m = 0; m < difficulte; m++){
		alert(tab[m]);
/* Par contre ici les valeurs de tab sont indéfinies alors que celles de choix sont toujours présentes*/
		alert(choix[m]);
	}
}, 10000);

2 réponses

ARMAND3 Messages postés 115 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 26 décembre 2015 4
26 déc. 2015 à 12:00
Apparemment la variable carre[i] n'est défini nulle part
0
Pronom Messages postés 5 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 27 décembre 2015
Modifié par Pronom le 26/12/2015 à 12:03
si si je n'ai juste pas collé le code entier

 var tab = [];
 var carre = new Array;
 var i=0;
 var j =0;
 var difficulte= 3;
 var temps = 1000;
 var choix= new Array;
  carre[0] = $(".carre.cun");
  carre[1] = $(".carre.cdeux");
  carre[2] = $(".carre.ctrois");
  carre[3] = $(".carre.cquatre");
  carre[4] = $(".carre.ccinq");
  carre[5] = $(".carre.csix");
  carre[6] = $(".carre.csept");
  carre[7] = $(".carre.chuit");
  carre[8] = $(".carre.cneuf");

   
 var getrand= function(){
  return Math.floor(Math.random() *9);     
 }
 
 for (var counter = 0; counter < difficulte; counter++) {
  setTimeout(function(){ 
   i = getrand();
   carre[i].css("border","3px solid black");
   tab[counter]=i;
   setTimeout(function(){ 
    carre[i].css("border-width","0px");
    alert(tab[counter]);
    getrand();
   },1000);
  },temps);
  temps+=2000;
 }
 
 
 
 $(".carre").click(function() {
   var myClass = $(this).attr("class");
  switch (myClass){
   case "carre cun":
    choix[j] = 0;
    break;
   case "carre cdeux":
    choix[j] = 1;
    break;
   case "carre ctrois":
    choix[j] = 2;
    break;
   case "carre cquatre":
    choix[j] = 3;
    break;
   case "carre ccinq":
    choix[j] = 4;
    break;
   case "carre csix":
    choix[j] = 5;
    break;
   case "carre csept":
    choix[j] = 6;
    break;
   case "carre chuit":
    choix[j] = 7;
    break;
   case "carre cneuf":
    choix[j] = 8;
    break;
   default : 
    alert("Faux");
  }
  j++;
 });
 
 setTimeout(function(){
  for (var m = 0; m < difficulte; m++){
   alert(tab[m]);
   alert(choix[m]);

  }
 }, 10000);
 
}
0
ARMAND3 Messages postés 115 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 26 décembre 2015 4
26 déc. 2015 à 12:30
Je ne suis peut être pas aussi bon que toi . mais il me semble que la variable counter n'est pas globale et du coup peu disparaître au sorti de la boucle essaye de la déclarer plus haut comme i et j
Je n'en suis pas certains. J'aurais bien pu essayer ton code sur ma machine mais je suis en déplacement merci
0
Pronom Messages postés 5 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 27 décembre 2015
Modifié par Pronom le 26/12/2015 à 12:54
Non les variables j et counter ne servent qu'a "se déplacer" dans le tableau tout comme m. La variable i écrit dans le tableau tab et ça fonctionne très bien dans la boucle. Par contre une fois dans la boucle du bas tab redeviens indéfini alors que choix reste défini comme il l'est juste au dessus
Dans le doute j'ai tout de même déclaré counter hors de la boucle mais sans succès
0
salut,
votre raisonnement est improductif...
SI vous utilisez un tableau (de variables)c'est que vous avez des valeurs tabulaires à utiliser. Sinon laissez tomber le tableau ou concentrez vous sur la façon de le remplir.
Le reste c'est des détails techniques mais il semble que vous ne savez pas ce que doit faire le programme et là c'est une faute qu'aucun code ne rattrape.

Pour obtenir le carré d'une valeur ou tout calcul utilisez une fonction.
Un tableau c'est pas pour ça puisque si vous avez une suite mathématique quelle qu'elle soit c'est simple à calculer(en utilisant la formule/opération directement d'où l'utilisation d'une fonction pour automatiser). Le tableau est utile pour retenir des valeurs qui proviennent d'ailleurs et qui ne peuvent pas être calculées à partir d'autres.
0
Voilà simplement et logiquement(donc sans retenir des valeurs-et utilisé de la mémoire pour rien):

function obtenirracinecarre(valeur){
var racine=Math.sqrt(valeur);
if(racine==racine.floor(racine)){//on vérifie que la racine carrée est un entier 
return(racine);

}else{
return ("n'est pas une racine carré entière");

}

}

Déjà le code devient plus clair et l'exécution de celui ci ne va perdre son temps à tester toutes les valeurs qui sont possibles, juste la valeur concernée au moment "t".
0
Pronom Messages postés 5 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 27 décembre 2015
Modifié par Pronom le 27/12/2015 à 13:09
Salut,

Ce n'est pas du tout ce que je cherche à faire:


Neuf carré sont disposé de cette manière.

Avec la fonction Math.random un des carré est encerclé par un border pendant quelques secondes puis la bordure est retirée. Et grâce à la boucle for 3 nombre aléatoires sont générés. L'idée est de récuperer ces 3 nombres dans le tableau tab et les conserver pour plus tard.

Ensuite l'utilisateur doit cliquer sur 3 carrés à sont tour. Ses choix sont stockés dans le tableau choix. Et jusqu'ici tout le code fonctionne parfaitement.

Enfin on arrive à la dernière boucle for qui à pour but de comparer les tableaux choix et tab (le code n'est plus écrit car ça ne fonctionnait pas).

Maintenant les alert();

Je les ai mises pour voir comment se comporte le code. Donc dans la première boucle for les nombres générés par la fonction Math.random sont parfaitement stocké et correspondent à ce qui se déroule à l'écran. Et le tableau choix stocke bien les entrées utilisateurs.

Le problème est qu'en dehors de cette première boucle le tableau tab est undefined...en tout cas c'est ce que je pensais jusqu'à hier. Par hasard (je rappelle que je suis débutant et autodidacte :p) j'ai inversé la boucle for et le setTimeout qui se trouvent en bas du code.

C'est à dire qu'au lieu d'avoir:

 setTimeout(function(){
  for (var m = 0; m < difficulte; m++){
   alert(tab[m]);
   alert(choix[m]);
  }
 }, 10000);


Il y à maintenant:

for (var m = 0; m < difficulte; m++){
 setTimeout(function(){
   alert(tab[m]);
   alert(choix[m]);
 }, 10000);
}


Dans cet ordre le tableau tab stock seulement le dernier nombre aléatoire déclaré plus haut.

C'est à dire que si i à généré les nombre 2, 4 et 9. Dans la la première boucle for tab[0] aura pour valeur 2, tab[1] = 4 tab[2] = 9.

Par contre dans la boucle for situées plus bas tab[0] sera égal à 9, tab[1] = 9 et tab[2]= 9.

Voilà j'ai essayé de clarifier au maximum mon code.
0