Je ne sais pas si c'est supprimé dans le dico et/ou dans la liste:
![]()
Je regarde simplement le fichier xml et je regarde si le canari "titi est supprimé
Je ne sais pas si c'est supprimé dans le dico et/ou dans la liste:
![]()
Je regarde simplement le fichier xml et je regarde si le canari "titi est supprimé
Ca veut dire que la méthode System.out.println est jamais appelée, autrement dit que unCanari est null, donc qu'il n'y a pas de canari prénommé titi dans ton dico. Je pense que tu as oublié d'initialiser le dico.
(T'avais pas une méthode init() ou un truc du genre dans la classe Annee ?? Parce que dans ce cas, il faut l'appeler après avoir créé l'objet lecture.)
J'ai pas de méthode init dans Annee.java
J'initialise bien le dico ... non?
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 public class Annee { private List listeCanaris = new ArrayList(); private Donnees Donnees = new Donnees(); private int annee = 0; public Annee() { super(); } public Annee(int annee) { this(); this.annee=annee; } public void remove(Canari unCanari){ listeCanaris.remove(unCanari); } public void addCanari(Canari unCanari) { listeCanaris.add(unCanari); Donnees.addCanari(unCanari); } public List getAnnee() { return listeCanaris; } public void setAnnee(List listeCanaris) { this.listeCanaris = listeCanaris; } //Methode pour obtenir le dico public HashMap getDico() { return Donnees.getDico(); } [....]![]()
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 public class Donnees { private HashMap dico; public Donnees() { dico = new HashMap(); } public HashMap getDico() { return dico; } public void addCanari(Canari unCanari) { dico.put(unCanari.getNom(), unCanari); } public void remove(Canari unCanari){ remove(unCanari); } }merci
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 public class DeleteCanari { void delCanari() { Annee lecture = Annee.lire(2005); //Methode pour récupérer un canari par son nom // Initialisation du dico HashMap dico = lecture.getDico(); Canari unCanari = (Canari)dico.remove("titi"); lecture.remove(unCanari); //Au cas où t'aurais pas de canari prénommé Titi. if(unCanari!=null) { System.out.println(unCanari); lecture.ecrire();// enregistrement de la modification dans le fichier xml } } }
Oki, ton dico est bien initialisé. Bon regarde si c pas un problème de casse (Titi au lieu de titi). Si c'est pas cà, essaye
à la place de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Canari unCanari = (Canari)dico.remove(new String("titi"));
SI ça marche toujours pas, après l'obtention du dico, rajoutes les lignes suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Canari unCanari = (Canari)dico.remove("titi");
Ca t'afficheras tous les noms de canaris enregistrés dans le dico.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Set set = dico.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }
Toujours rien!![]()
![]()
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 public class DeleteCanari { void delCanari() { Annee lecture = Annee.lire(2005); //Methode pour récupérer un canari par son nom // Initialisation du dico HashMap dico = lecture.getDico(); Set set = dico.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } Canari unCanari = (Canari)dico.remove(new String("titi")); lecture.remove(unCanari); //Au cas où t'aurais pas de canari prénommé Titi. if(unCanari!=null) { System.out.println(unCanari); lecture.ecrire();// enregistrement de la modification dans le fichier xml } } }
Toujours rien!![]()
![]()
J'ai un autre scoop.... ModifierBaseAnne ne fonctionne plus non plus !
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 public class DeleteCanari { void delCanari() { Annee lecture = Annee.lire(2005); //Methode pour récupérer un canari par son nom // Initialisation du dico HashMap dico = lecture.getDico(); Set set = dico.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } Canari unCanari = (Canari)dico.remove(new String("titi")); lecture.remove(unCanari); //Au cas où t'aurais pas de canari prénommé Titi. if(unCanari!=null) { System.out.println(unCanari); lecture.ecrire();// enregistrement de la modification dans le fichier xml } } }
Les deux sont construit de la même façon![]()
![]()
![]()
Bon, place un System.out.println("ce que tu veux") juste après l'obtention du dico. S'il te sort quelque chose, ça veut dire que ton dico est vide, dans ce cas faut voir du côté de la méthode lire. Sinon, ça veut dire que les méthodes de modif et de suppression sont jamais appelées, dans ce cas ce serait cool que tu postes le code où tu les appelles.
J'ai placé unpour voir s'il trouve le canari "titi"
Code : Sélectionner tout - Visualiser dans une fenêtre à part else { System.out.println("pas de canari");}
J'ai la sortie console "pas de canari"
J'ai aussi fait un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 HashMap dico = lecture.getDico(); Canari unCanari = (Canari)dico.remove("titi"); System.out.println(unCanari);
J'ai null en sortie console
Ben ça veut dire que ton dico contient pas de canaris nommé titi. Si t'as laissé les quelques lignes (Set set = dico.keySet() etc...) ça veut dire que ton dico est carrément vide. Bon deux chose : supprime la méthode remove de la classe Donnees (pas celle de la classe Annee), elle sert à rien, en plus si tu l'appelles un jour, tu entres dans une bouvle infinie (même problème que le repaint sur ton autre poste).
Ensuit, rajoute un System.out.println(unCanari.getNom()) en première ligne de la méthode addCanari de la classe Annee. Si rien ne sort, ça veut dire qu'il y a un problème du côté de la méthode de lecture (où du fichier xml).
Je me pose une question:
J'ai fais une manip ce matin pour mettre une majuscule à mes class
Je me demande si l'erreur ne vient pas de là:
Dans Annee.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private Donnees Donnees = new Donnees();
et Donnees.java
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 public class Annee { private List listeCanaris = new ArrayList(); private Donnees Donnees = new Donnees(); private int annee = 0; public Annee() { super(); } public Annee(int annee) { this(); this.annee=annee; } public void remove(Canari unCanari){ listeCanaris.remove(unCanari); } public void addCanari(Canari unCanari) { listeCanaris.add(unCanari); Donnees.addCanari(unCanari); } public List getAnnee() { return listeCanaris; } public void setAnnee(List listeCanaris) { this.listeCanaris = listeCanaris; } //Methode pour obtenir le dico public HashMap getDico() { return Donnees.getDico(); } [...]
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 public class Donnees { private HashMap dico; public Donnees() { dico = new HashMap(); } public HashMap getDico() { return dico; } public void addCanari(Canari unCanari) { dico.put(unCanari.getNom(), unCanari); } public void remove(Canari unCanari){ remove(unCanari); } }:
ok, j'avais pas vu. Convention : majuscule pour les classes, minuscule pour les attributs. Donc :
et t'oublies pas de mettre à jour le reste du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private Donnees donnees = new Donnees();
J'ai rajouter System.out.println(unCanari.getNom()) dans la méthode addCanari
Il affiche bien le nom du canari ajouter
Pour moi la lecture fonctionne car je peux ajouter de nouveaux canari en faisant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Annee lecture = Annee.lire(2005); Canari unCanari = new Canari("titi","mâle",1212,58,2004); lecture.addCanari(unCanari); lecture.ecrire();![]()
t'as bien remplacer le Donnees.addCanari par donnees.addCanari dans la classe Annee ?
Oui![]()
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 public class Annee { private List listeCanaris = new ArrayList(); private Donnees donnees = new Donnees(); private int annee = 0; public Annee() { super(); } public Annee(int annee) { this(); this.annee=annee; } public void remove(Canari unCanari){ listeCanaris.remove(unCanari); } public void addCanari(Canari unCanari) { listeCanaris.add(unCanari); donnees.addCanari(unCanari); System.out.println(unCanari.getNom()); } public List getAnnee() { return listeCanaris; } public void setAnnee(List listeCanaris) { this.listeCanaris = listeCanaris; } //Methode pour obtenir le dico public HashMap getDico() { return donnees.getDico(); } [...]
Salut,
Pour supprimer un canari il faut ajouter dans la classe Annee une méthode qui rend ce service :
pour l'appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void removeCanari(String nomCanari) { listeCanaris.remove(donnees.remove(nomCanari)); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Annee lecture = Annee.lire(2005); lecture.removeCanari("titi"); lecture.ecrire();
Ben a priori elle y est déjà :
L'enregistrement est supprimé du dico depuis la classe DeleteCanari, donc je vois pas pourquoi rajouter une méthode dans Annee..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void remove(Canari unCanari){ listeCanaris.remove(unCanari); }:
Ah mon avis, le problème vient du HashMap
Dans ma class ModifierBaseAnnee.java (qui fonctionnait), j'ai exactement le même problème
Mon code ModifierBaseAnnee.java
Apparament,
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 public class ModifierBaseAnnee { void editBaseAnnee() { Annee lecture = Annee.lire(2005); //C'est jutse pour le test -> lecture dans la console for( Iterator ite=lecture.getAnnee().iterator(); ite.hasNext(); ){ Canari unCanari = (Canari) ite.next(); unCanari.affiche(); } //Methode pour récupérer un canari par son nom // Initialisation du dico HashMap dico = lecture.getDico(); Canari unCanari = (Canari)dico.remove("titi"); System.out.println(unCanari); //Au cas où j'aurais pas de canari prénommé Titi. if(unCanari!=null) { unCanari.setNom("grosMinet"); // changement du nom par exemple (titi devient grosMinet ;-)) dico.put(unCanari.getNom(),unCanari); lecture.ecrire();// enregistrement de la modification dans le fichier xml } else { System.out.println("pas de canari");} } }lis correctement le fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part Annee lecture = Annee.lire(2005);
Mais il y a un problème pour stocker dans dico
ben pour une question de simplicité (de compéhension et d'utilisation) il me semble .
Comme donnee est un attribut de Annee :
c'est peut - être un peut lourd pour supprimer de faire
car alors pourquopi ne pas faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 HashMap dico = lecture.getDico(); Canari unCanari = (Canari)dico.remove("titi"); lecture.remove(unCanari); lecture.ecrire();
a mon avis un fichier correspond à une Annee puis il faut écrire les méthodes dans l'Annee
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 HashMap dico = lecture.getDico(); Canari unCanari = (Canari)dico.remove("titi"); ArrayList liste = lecture.getAnnee(); liste.remove(unCanari); lecture.ecrire();
lecture, reccupération d'un canari (par nom ou autre critère),suppression, ecriture
et pour l'utilsation cela marche simplement :
Je pense qu'il faut garder à l'esprit que malgrés les énormes progrés de pingoui
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //Lecture d'une annee : Annee uneAnnee = Annee.lire(2005); //Ajout d'un canari uneAnnee.addCanari(canariAAjouter); //reccupération d'un canari par rapport au nom Canari unCanari = uneAnnee.getCanari("titi"); //suppression d'un canari uneAnnee.removeCanari("titi"); //sauvegarde de l'annee uneAnnee.ecrire();il est débutant et qu'il vaut peut-être mieux faire simple
Partager