Bonjour à tous,
Je cherche à créer une méthode qui me permette d'afficher tous les élements d'un tableau à n dimensions, n étant inconnu.
Pour cela j'ai pensé à une méthode récursive de la forme suivante:
ecrireTout : prend un tableau (tab) en argument (peut être une table d'entiers, de doubles, de String... on ne sait pas)
1 - J'obtiens la dimension de tab stockée dans un entier (dim)
2 - Si dim > 1 alors
2.1 Pour chaque sous tableau (nommé sousTab) que constitue chaque ligne, de la ligne 0 à la dernière on exécute ecrireTout(sousTab)
3 - Sinon alors
3.1 Pour chaque élément de mon tableau à une dimension, de la case 0 à la dernière, j'affiche le contenu de chaque case
4 - Fin
Pour les boucles, je compte utiliser la syntaxe suivante, par exemple pour un tableau à trois dimensions de String:
For (String sousTab[][] : tab) {
ecrireTout(sousTab)
}
Sur le papier, cette méthode donne le résultat escompté (à la mise en forme et l'utilité finale près)
Problèmes:
- J'ai pris ici l'exemple d'une table de String, mais je ne sais pas à l'avance qu'il s'agit d'un String, je ne peux donc pas écrire "String", là seule chose, c'est que l'objet soit itérable
- J'ai pris ici l'exemple d'une table de 3 dimensions, mais je ne connais pas cela à l'avance non plus. D'autre part, je ne peux pas le coder en dur puisque de toutes façons, à l'itération suivante de la fonction, la table sera de dimension 2
Comme je ne connais pas bien du tout Java, je ne sais pas comment gérer cela de façon dynamique, et c'est ce que je souhaiterais faire.
C'est à dire qu'à partir d'un tableau je veux:
- être capable de déterminer le type de ce qu'il contient
- être capable de faire comprendre au compilateur qu'il faut lire: sousTab[][], ou sousTab[], ou sousTabl[][][], juste à partir de l'information de dimension: 1, 2 ou 3
Bien sur, je peux aussi utiliser un itérateur i qui va s'incrémenter, créer moi même un nouveau tableau à chaque itération, mais je doute de l'interêt en termes de temps de calcul pour des tableaux costauds (je vais être ammené à manier des tables à 7 dimensions dont certaines contiendront jusqu'à 400 lignes de base).
De plus, ça sera bien plus intéressant pour moi en terme d'apprentissage sur Java d'avoir la réponse à ces questions.
Merci !
PS:
Pour déterminer la dimension du tableau, voici la méthode que j'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public static int getNbDimension( Object table ) { int dim=0; Class<?> cls = table.getClass(); while( cls.isArray() ) { cls = cls.getComponentType(); dim++; } return( dim ); }
J'avoue que je n'arrive pas à bien comprendre cette méthode, j'ai l'impression que le cls parcours chaque dimension du tableau jusqu'à ne plus être un Array, même en utilisant le mode debug je n'arrive pas à comprendre ce que font les méthodes getClass, isArray, getComponentType, même si ça parait intuitif, le résultat reçu ne l'est pas.
Quelqu'un pourrait-il m'expliciter cette méthode ?
Merci à vous
Partager