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 :

Tableaux à 2 dimensions


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 120
    Points : 53
    Points
    53
    Par défaut Tableaux à 2 dimensions
    Bonjour,

    C'est la première fois que je manipule un tableau à deux dimensions avec Js et vous savez ce qu'on dit des première fois !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var tab = new Array();
    	for(var i=0; i<length; i++){
    		tab[i]=new Array();
    		var tab = elt_split[i].split("/");
    			for(var j=0; j<tab.length; j++){
    				tab[i][j] = (tab[j]);
    				//alert("i = "+i+" Valeur attendu = Numéro machine");
    				//alert("j = "+j+" Valeur attendu = Numéro élément");
    				//alert("tab[j] = "+tab[j]+" Valeur attendu = Nom Machine/Nom Arret/Duree Arret");
    				alert(tab[i][j]);
    				}}
    Mon alert m'affiche à chaque fois "undefined" alors que les autres (ceux en commentaires) m'affiche bien ce que j'attends. Quel est donc mon erreur ?

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 120
    Points : 53
    Points
    53
    Par défaut
    Problème résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		var tab = new Array();
    		for(var i=0; i<length; i++){
    		tab2 = elt_split[i].split("/");
    		tab[i] = new Array();
    			for(var j=0; j<tab2.length; j++){
    			    tab[i][j] = tab2[j];
    				}
    			}

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    il s'agit d'une erreur fréquente les tableaux à deux dimensions n'existe pas en JS
    on peux faire des tableau à une dimension dont les contenus sont des tableau à une dimensions dont ...

    ce l'est pas identique à la notion de tableau à deux dimension mais ça permet de le simuler à condition de faire attention
    tableau-double-entree-plus

    A+JYT

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Sans vouloir relancer des débats inutiles, je n'ai toujours pas compris la différence que tu essaies de montrer sekaijin. Pour moi c'est du pareil au même.
    One Web to rule them all

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    si tu fais une matrice N x M
    tu as exactement N ligne et M colonnes

    si tu fais un tableau de tableaux, tu n'as aucune garantie que tous ont la même taille

    tu peux donc très bien utiliser un tableau de N éléments qui sont tous des tableaux de M cellules pour représenter une matrice N X M.
    Mais pour ça, il te faut prendre des précautions.

    1. Soit lorsque tu créés tes tableaux tu garantis que tu as effectivement N ligne de M colonnes.
    2. Soit comme notre ami Kazumi tu initialises à partir d'une variable (split) et tu n'as pas garantit que tu as N X M cellules.

    Si tu as choisi la solution 1) lorsque tu parcours ta matrice, tu peux utiliser des boucles simples, car tu es à l'abri des undefined.
    Si tu as choisi la solution 2) tu peux rencontré des undefined. Cela est dû au fait qu'un tableau de tableau n'est pas une matrice N X M, mais juste un moyen de la représenter. Il te faut alors tenir compte de cette possibilité. Il n'y a rien de bien compliqué. Il faut juste être conscient de ce qu'on manipule.

    C'est une erreur très courante dans tous les langages qui ne possèdent pas la notion de matrice et qui ne force pas la définition de la taille des tableaux.
    On pense parcourir une matrice et on ne fait pas attention qu'un tableau de tableau n'a pas exactement les mêmes caractéristiques qu'une matrice.

    Il existe dans la théorie de l'algo toute une littérature sur la notion de matrice et les diverses représentations que l'on peut utiliser pour les implémenter. Pour chacune, il existe des algo types pour les manipuler et faire du calcul matriciel.

    Un façon de faire est d'utiliser une liste d'objet. cela permet d'avoir des matrices à n dimensions ex: 4 dimensions N X M X K x J)
    chaque objet possède les attributs coordonnés et la valeur {x:1, y:1, z:4, t:8, value:'test'}
    Cette représentation est particulièrement bien adaptée lorsque les matrices on beaucoup de dimensions, sont très grandes et pour lesquelles peux de valeur sont renseignées (matrice à trou). Cette façon de considérer une matrice offre dans ce cas une occupation optimale de la mémoire
    (Imagine une matrice à deux dimensions 100 000 000 x 1 000 000 000 qui ne contient que 1000 valeurs).
    Lorsque tu utilises une telle façon de représenter une matrice, les algo sont différents de ceux que tu aurais avec une vraie matrice.

    En java tu pourrais faire dans ce cas tu as un tableau de tableau et tu sais que tu as 5 lignes de 4 colonnes ou 4 lignes de 5 colonnes. mais tu peux aussi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = new ArrayList<ArrayList<Integer>>();
    dans ce cas tu n'as pas de garantie et il te faut en tenir compte dans ton code.
    En JavaScript tu es dans ce dernier cas par défaut.

    Lorsqu'on est (bien) habitué, on en tient compte sans s'en rendre compte.
    Mais c'est une erreur très commune.

    On peut oublier la théorie et juste dire qu'on ne parcourt jamais un tableau JS en utilisant des valeurs d'indice avec des constantes, mais uniquement en utilisant les propriétés du tableau. Ou décider de toujours initialiser complètement son tableau avant de l'utiliser.

    Je pense qu'il est bon de temps en temps de comprendre pourquoi. Même si très vite ensuite on redevient plus pragmatique.

    A+JYT

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Hum je comprends mieux ce que tu veux dire, mais du coup cette remarque vaut plus généralement pour les Array même unidimensionnelles non ? Si on crée une Array de longueur prédéfinie, rien n'empêche de l'étendre par mégarde par la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var arr = new Array(5);
    arr[5]=5;
    arr[6]=6;
    console.log(arr.length);  // => 7
    Là où Java nous claque entre les doigts, JavaScript jongle avec des objets mutables. Peu importe le nombre de dimensions, sans créer de nouvel objet ou surcharger le prototype de Array, je ne vois pas comment on peut s'assurer de manipuler une liste de longueur fixe en JS.
    One Web to rule them all

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tout a fait les objet mutable ont des caractéristiques bien différentes des objet mathématiques qu'on représente avec.

    Soyons en conscient
    A+JYT

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/03/2006, 17h48
  2. [Tableaux] mémoriser un tableaux à n dimension
    Par Benat64 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 16h43
  3. [Tableaux] Gerer des tableaux à deux dimensions
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 15h20
  4. Tableaux à plusieurs dimensions
    Par Diabolik dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/12/2003, 12h15
  5. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44

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