Bonjour;
je veux créer une matrice dynamique de type HashMap:
HashMap<String,Double>[][] graphPrec = {{ new HashMap<String,Double> }};
il me signale cette erreur:
Cannot create a generic array of HashMap<String,Double>
Heeeeeeeeeeelp :(
Version imprimable
Bonjour;
je veux créer une matrice dynamique de type HashMap:
HashMap<String,Double>[][] graphPrec = {{ new HashMap<String,Double> }};
il me signale cette erreur:
Cannot create a generic array of HashMap<String,Double>
Heeeeeeeeeeelp :(
C'est une limitation des tableaux en java. On ne peux pas créer des tableaux avec des types génériques. Parceque le typage n'est pas utilisé pour le tableau.
On ne peux donc pas faire new T[] avec T un type générique, ni new X<Y>[]. Et c'est implicitement ce que fait votre code.
une solution, qui ne déclenche qu'un warning:
Mais c'est pas parfait :s. C'est une plainte sur les generics depuis le début, cette histoire de tableaux. Espérons que oracle corrigera ça avec la réification des classes génériques qu'on nous promet pour java 8Code:
1
2 HashMap<String,Double> table[][] = new HashMap[][]{{new HashMap<String,Double>()}};
Bonjour tchize;
Merciiiiiiiiii pour votre réponse.
ça passe, on ne me signale plus l'erreur.
Le problème mnt est lorsque j'essaye de remplir qlq ligne pour tester:
((HashMap<String, Double>) graphPrec[0][0]).put("T01", 3.2);
((HashMap<String, Double>) graphPrec[0][1]).put("T02", 1.2);
ça compile mais à l’exécution ça déclenche l'exception suivante au niveau du remplissage de la 2em case:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
c'est normal, vous n'avez créé qu'un tableau de taille [1][1], il n'y a pas de deuxième éléments.
Au passage votre structure est bizarre, vous essayez de faire quoi avec ça?
En fait; Je veux définir un graphe de précédence des tâches.
une case de la matrice est un dictionnaire {refTâche : duréeTâche}
une ligne de la matrice est composée de deux cases:
- la case 0: la tâche Courante
- la case 1: la tâche Suivante
(Je passe cette structure à une fonction qui calcule le temps de repos entre les tâches)
vous n'avez pas d'idées sur une structure plus simple à implémenter qui répond à ce que je viens d'expliquer ? :roll:
si il n'y a, comme je l'ai compris, qu'une seule paire refTache / dureeTache pas cellule, vous devriez avoir ce genre de Structure:
Code:
1
2
3
4
5
6
7
8
9
10 public Class Tache { private String nom; private double poids; public Tache(String nom, double poids){ this.nom=nom; this.poids=poids; } public String getNom(){return nom;} public double getPoids(){return poids;} }
Code:
1
2
3
4
5
6
7
8
9
10
11 public Class PaireTache { private Tache courante; private Tache suivante; public PaireTache(Tache courante, Tache suivante){ this.courante = courante; this.suivante = suivante; } public Tache getCourante(){return courante;} public Tache getSuivante(){return suivante;} }
Code:
1
2
3
4
5 PaireTache[] graphPrec = new PaireTache[taille]; graphPrec[0] = new PaireTache( new Tache("T01", 3.2), new Tache("T02", 1.2) );
ça résout parfaitement mon problème.
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ;)