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 :

Undefined qui est "defined"


Sujet :

JavaScript

Vue hybride

rollergirl Undefined qui est... 21/01/2009, 14h09
E.Bzz Bonjour, comme ton Array... 21/01/2009, 14h21
rollergirl Merci de ton aide mais j'ai... 21/01/2009, 14h29
E.Bzz Essaye var placeX =... 21/01/2009, 14h34
rollergirl Je viens de tester en... 21/01/2009, 14h39
Auteur bonjour, - déjà tu peux... 21/01/2009, 14h25
E.Bzz J'ai failli crier au plagiat ... 21/01/2009, 14h31
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 116
    Par défaut Undefined qui est "defined"
    Bonjour à tous,

    Je dois réaliser un projet en javascript or j'ai une erreur qui me bloque.
    On me dit que mon tableau nommé global n'est pas défini quand je l'appelle dans une fonction.
    Vous auriez une idée ??

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    var global = new Array();
    var nbCase = window.prompt("Entrez le nombre de cases que vous voulez pour votre tableau");
    var test=nbCase*nbCase;
     
    	function TBL_virtuel() {
    		for (var x=0; x<nbCase; x++) {
    			global[x] = new Array();
    			for (var y=0; y<nbCase; y++) {
     
    					global[x][y]="vide"; 
    			}	
    		}
    		return global;
    	}
     
    		function afficher()
    	{
    		var p=0;
    		var coef=0.80;
    		var nombreAs = nbCase*coef;
    		var cellules = document.getElementsByTagName('td');
    		for (var x=0; x<nbCase; x++) {
    			for (var y=0; y<nbCase; y++) {
    				calcul_place_A(global);
    				calcul_place_B();
    			}
    		}
    	}
     
    	function calcul_place_A () {
    		var p=0;
    		var nombreAs = test/8.1;
    		Math.round(nombreAs);
    			do {
    				var aleatoire = Math.random();
    				var aleatoi = Math.random();
    				var placeX = Math.round(aleatoire * nbCase);
    				var placeY = Math.round(aleatoi * nbCase);
    				if ((placeX>0) && (placeX<=nbCase) && (placeY>0) && (placeY<=nbCase)) {
    				global[placeX][placeY]="As";
    				alert (global[placeX][placeY]);
    				}
     
    				p++;
    			} while (p<nombreAs);
    		//document.write(global);
    		return global;
    	}
     
     
    	function calcul_place_B () {
     
    			if ((x>0)&&(y>0)&&(global[x-1][y-1]!="As"))
    				{
    					global[x-1][y-1]++;
    				}
     
    				if ((x>0)&&(y>0)&&(global[x][y-1]!="As"))
    				{
    					global[x][y-1]++;
    				}
     
    				if ((x<nbCase-1)&&(y>0)&&(global[x+1][y-1]!="As"))
    				{
    					global[x+1][y-1]++;
    				}
     
    				if ((x>0)&&(y>0)&&(global[x-1][y]!="As"))
    				{
    					global[x-1][y]++;
    				}
     
    				if ((x>0)&&(y>0)&&( global[x][y]!="As"))
    				{
    					global[x][y]++;
    				}
     
    				if ((x<nbCase-1)&&(y>0)&&(global[x+1][y]!="As"))
    				{
    					global[x+1][y]++;
    				}
     
    				if ((x>0)&&(y<nbCase-1)&&(global[x-1][y+1]!="As"))
    				{
    					global[x-1][y+1]++;vivant++;
    				}
     
    				if ((x>0)&&(y<nbCase-1)&&(global[x][y+1]!="As"))
    				{
    					global[x][y+1]++;
    				}
     
    				if ((x<nbCase-1)&&(y<nbCase-1)&&(global[x+1][y+1]!="As"))
    				{
    					global[x+1][y+1]++;
    				}
     
     
    	document.write(global);
    	}

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    comme ton Array "global" est déclaré en variable .... globale ( ), il faut enlever les "return global;" à la fin de tes fonctions ...
    De plus ces return ne sont visiblement pas "attendus" par la fonction appelante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calcul_place_A(global);
    Ne le passe pas en paramètre : c'est une variable globale (donc visible de toutes les fonctions).

    De plus, bien que pas tout à fait compris le but de ton script, tu ne confondrais pas Array et <table> ?

    Et que comptes-tu obtenir avec sachant que global[x-1][y-1] contient du caractère ?

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 116
    Par défaut
    Merci de ton aide mais j'ai toujours cette erreur dans firefox "global[placeX] is undefined"

    Pour le tableau global[placeX] j'avais oublier que mon tableau avait vide par défaut...

    en ce qui concerne le code, il doit me servir de base pour faire un démineur, sachant que pour le moment rien n'est affiché en html, l'appel au dom se fera en dernier.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par rollergirl Voir le message
    Merci de ton aide mais j'ai toujours cette erreur dans firefox "global[placeX] is undefined"
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var placeX = Math.round(aleatoire * parseInt(nbCase, 10));
    car nbCase est du string à l'origine (prompt() ).

    En respectant bien sûr les conseils d'Auteur pour les déclarations

    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 116
    Par défaut
    Je viens de tester en changeant avec parsint mais sa m'affiche toujour la même erreur... :/

    La fonction parsint sert bien à lui dire que le pront saisie est un chiffre mais a quoi sert le 10 ?

    Pour la déclaration des varaibles c'est mieux ainsi ?

    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
    22
    23
    24
    	function calcul_place_A () {
     
    	// Déclaration des variables utiliser pour cette fonction
    		var aleatoire;
    		var aleatoi;
    		var placeX;
    		var placeY;
    		var p=0;
    		var nombreAs = test/8.1;
    		Math.round(nombreAs);
    			do {
    				aleatoire = Math.random();
    				aleatoi = Math.random();
    				placeX = Math.round(aleatoire * parseInt(nbCase, 10));
    				placeY = Math.round(aleatoi * parseInt(nbCase, 10));
    				if ((placeX>0) && (placeX<=nbCase) && (placeY>0) && (placeY<=nbCase)) {
    				global[placeX][placeY]="A";
    				//alert (global[placeX][placeY]);
    				}
     
    				p++;
    			} while (p<nombreAs);
     
    	}

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par rollergirl Voir le message
    Je viens de tester en changeant avec parsint mais sa m'affiche toujour la même erreur... :/
    Tu as essayé de changé le nom de ton Array (sait-on jamais) ?

    Citation Envoyé par rollergirl Voir le message
    La fonction parsint sert bien à lui dire que le pront saisie est un chiffre mais a quoi sert le 10 ?
    C'est pour indiquer une conversion en base 10. Sans ça un bug de la fonction fait que certaines valeurs sont converties dans une autre base (hexa, octale ...) en fonction du 1° caractère de la valeur à convertir. Il y a un thread sur ce problème je crois ...

    Citation Envoyé par rollergirl Voir le message
    Pour la déclaration des varaibles c'est mieux ainsi ?


    A+

  7. #7
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    - déjà tu peux supprimer les return global dans la mesure où ton tableau est une variable globale (en plus dans ton code tu ne récupères pas ce que retourne les fonctions).

    - dans ta fonction afficher() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calcul_place_A(global);
    supprime le paramètre car d'après sa définition, calcul_place_A() n'a pas de paramètres

    - pour faire du débogage, utilise plutôt alert() ou innerHTML sur un élément présent dans ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("idElement").innerHTML = global
    banni le document.write() !!


    Ensuite :
    1- A quoi sert ce code ?
    2- comment sont appelées les différentes fonctions (événements qui les appellent, dans quel ordre sont-elles exécutées) ?
    3- Perds l'habitude de déclarer tes variables dans des boucles, le programme perd de sa clarté et ça me donne des boutons ces de déclarations variables qui se baladent à droite et à gauche. Déclare tes variables au début de tes fonctions, tu gagneras en lisibilité et sans doute en performance.


    [edit]

    E.Bzz : nos messages se sont croisés

    [/edit]

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Auteur Voir le message
    E.Bzz : nos messages se sont croisés
    J'ai failli crier au plagiat

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