[JAVA] Vector + classes
Résolu/Fermé
Stargirlfr
Messages postés
1175
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
12 février 2017
-
27 févr. 2008 à 13:00
Yukino - 14 janv. 2012 à 04:52
Yukino - 14 janv. 2012 à 04:52
A voir également:
- [JAVA] Vector + classes
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
9 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 févr. 2008 à 13:27
27 févr. 2008 à 13:27
Bonjour, ton erreur vient du fait que ton objet list n'as pas été instancié, donc est null. Du coup lorsque tu tente d'appeller une méthode depuis cet objet, l'objet étant null, cela renvoi une NullPointerException.
Ce qu'il faut que tu fasse : Créer un constructeur (comme dans toute classe qui se respecte) dans lequel tu instancie ta liste :
Ce qu'il faut que tu fasse : Créer un constructeur (comme dans toute classe qui se respecte) dans lequel tu instancie ta liste :
public FichierEleves ( ){ ListeEleves = new Vector(); }
Stargirlfr
Messages postés
1175
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
12 février 2017
357
27 févr. 2008 à 13:37
27 févr. 2008 à 13:37
Super ! Effectivement, ça marche maintenant !
Cependant, j'ai une autre petite erreur : voici ce que j'obtiens quand je compile :
***********************************************************************
Mon fichier élèves après ajout : fichierEleves.FichierEleves@45a877
Elève supprimé de la liste.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.removeElementAt(Unknown Source)
at fichierEleves.FichierEleves.removeEleve(FichierEleves.java:34)
at fichierEleves.MainFichierEleves.main(MainFichierEleves.java:25)
***********************************************************************
Comment dois-je faire pour qu'il m'affiche mon vecteur (qu'il m'affiche tous les noms des élèves... avec prénoms et note) ? Y'a-t'il une fonction particulière dans vector ?
Encore merci beaucoup pour ton aide !
Cependant, j'ai une autre petite erreur : voici ce que j'obtiens quand je compile :
***********************************************************************
Mon fichier élèves après ajout : fichierEleves.FichierEleves@45a877
Elève supprimé de la liste.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.removeElementAt(Unknown Source)
at fichierEleves.FichierEleves.removeEleve(FichierEleves.java:34)
at fichierEleves.MainFichierEleves.main(MainFichierEleves.java:25)
***********************************************************************
Comment dois-je faire pour qu'il m'affiche mon vecteur (qu'il m'affiche tous les noms des élèves... avec prénoms et note) ? Y'a-t'il une fonction particulière dans vector ?
Encore merci beaucoup pour ton aide !
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 févr. 2008 à 13:41
27 févr. 2008 à 13:41
Lorsque tu ajoute quelque chose dans un tableau, une liste, etc.. le premier indice est 0 et non 1.
Conclusion lorsque tu tente de supprimer après ton ajout, tu tape à l'indice 1 pour le premier, ce qui fonctionne puisque tu as enregistré deux utilisateurs (positions 0 et 1 respectivement), mais lorsque tu fais le deuxième delete, tu tape à la position 2, qui n'existe pas dans ta liste.
Il faut donc que tu refasse tes indices correctement comme suit :
Conclusion lorsque tu tente de supprimer après ton ajout, tu tape à l'indice 1 pour le premier, ce qui fonctionne puisque tu as enregistré deux utilisateurs (positions 0 et 1 respectivement), mais lorsque tu fais le deuxième delete, tu tape à la position 2, qui n'existe pas dans ta liste.
Il faut donc que tu refasse tes indices correctement comme suit :
MonFichierEleve.removeEleve(0); MonFichierEleve.removeEleve(1);
Stargirlfr
Messages postés
1175
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
12 février 2017
357
27 févr. 2008 à 14:00
27 févr. 2008 à 14:00
Oui, c'est fait (je l'avais changé, j'ai oublié de le préciser...).
J'obtiens toujours la même erreur.
(encore merci beaucoup pour ton aide, c'est super gentil de te pencher sur mon problème !)
J'obtiens toujours la même erreur.
(encore merci beaucoup pour ton aide, c'est super gentil de te pencher sur mon problème !)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 févr. 2008 à 14:14
27 févr. 2008 à 14:14
Je suis sur pas certain mais il est possible que l'objet java "Vector" se réinitialise automatiquement. Donc quand tu supprime l'élément premier (position 0 dans ta liste), il ne reste plus qu'un seul objet dans ta liste au lieu de deux, et ce deuxième objet se "décale" donc d'un cran. Pour le coup la taille de ta liste est de 1, ce qui fait que lorsque tu tente de supprimer l'enregistrement deux, à la position 1, puisque ce dernière se situe maintenant à la position 0 (et que ta liste a une taille de 1 au lieu de 2), ca t'envoi une exception (1 >= 1 (taille liste))
Ce qu'il faut que tu fasse pour être sur que c'est bien là la raison, c'est de supprimer deux fois l'élément 0 (au lieu de 0 puis 1).
Si tout se passe bien c'est que c'est ça, auquel cas il faudra que tu revois ta manière de supprimer un élément de ta liste (non plus sur le numéro d'index, mais sur le nom de la personne par exemple)
Ce qu'il faut que tu fasse pour être sur que c'est bien là la raison, c'est de supprimer deux fois l'élément 0 (au lieu de 0 puis 1).
Si tout se passe bien c'est que c'est ça, auquel cas il faudra que tu revois ta manière de supprimer un élément de ta liste (non plus sur le numéro d'index, mais sur le nom de la personne par exemple)
Tu as tout à fait raison kij_82 : La classe Vector réorganise les indices du tableau lors de la suppression d'un élément comme le prouve la javadoc :
public void removeElementAt(int index)
Deletes the component at the specified index. Each component in this vector with an index greater or equal to the specified index is shifted downward to have an index one smaller than the value it had previously. The size of this vector is decreased by 1.
public void removeElementAt(int index)
Deletes the component at the specified index. Each component in this vector with an index greater or equal to the specified index is shifted downward to have an index one smaller than the value it had previously. The size of this vector is decreased by 1.
Stargirlfr
Messages postés
1175
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
12 février 2017
357
27 févr. 2008 à 14:50
27 févr. 2008 à 14:50
SUPER ! C'est ça, merci beaucoup !!!
Bon, vous allez me trouver embêtante mais... j'ai toujours l'erreur suivante : quand je compile, j'obtiens le résultat suivant :
************************************************************
Mon fichier élèves après ajout : fichierEleves.FichierEleves@45a877
Elève supprimé de la liste.
Elève supprimé de la liste.
Mon fichier élèves après suppression : fichierEleves.FichierEleves@45a877
************************************************************
Lorque j'affiche mon vecteur avec System.out.println(Liste1); ça me marque "fichierEleves.FichierEleves@45a877" alors que je souhaiterai que ça me donne les noms, prénoms, notes des élèves compris dans le vecteur... comment cela se fait-il ? Y'a-t-il une fonction spécifique aux vecteurs afin de les afficher ?
(encore une fois, merci)
Bon, vous allez me trouver embêtante mais... j'ai toujours l'erreur suivante : quand je compile, j'obtiens le résultat suivant :
************************************************************
Mon fichier élèves après ajout : fichierEleves.FichierEleves@45a877
Elève supprimé de la liste.
Elève supprimé de la liste.
Mon fichier élèves après suppression : fichierEleves.FichierEleves@45a877
************************************************************
Lorque j'affiche mon vecteur avec System.out.println(Liste1); ça me marque "fichierEleves.FichierEleves@45a877" alors que je souhaiterai que ça me donne les noms, prénoms, notes des élèves compris dans le vecteur... comment cela se fait-il ? Y'a-t-il une fonction spécifique aux vecteurs afin de les afficher ?
(encore une fois, merci)
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 févr. 2008 à 14:55
27 févr. 2008 à 14:55
C'est parce que tu donne à la méthode d'affichage un objet et non une "entité affichable" au sens où on l'entend. Du coup puisqu'il s'agit d'un objet, la méthode affiche la référence de l'objet et non ce que contient l'objet.
Comment veux-tu d'ailleurs que java sache à l'avance comment afficher ce que toi tu créer :)
Si tu souhaite afficher ta liste, il faut que tu développe ta propre méthode d'affichage :)
Ex de méthode :
Ce qui est en gras est à modifier éventuellement selon les propriétés de ta classe Eleve.
Le code n'as pas été testé ni écrit dans un environnement de développement donc test à faire au préalable :)
Comment veux-tu d'ailleurs que java sache à l'avance comment afficher ce que toi tu créer :)
Si tu souhaite afficher ta liste, il faut que tu développe ta propre méthode d'affichage :)
Ex de méthode :
public String displayList ( ){ String toreturn = ""; Eleve myEleve = null; for (int i = 0; i < ListeEleves.size(); i++){ // --- Retrieve current Eleve from the list myEleve = (Eleve) ListeEleves.get(i); // --- Display eleve properties in string to return toreturn += "Nom : "+myEleve.nom+" Prenom : "+myEleve.prenom+"\n"; } return toreturn; }
Ce qui est en gras est à modifier éventuellement selon les propriétés de ta classe Eleve.
Le code n'as pas été testé ni écrit dans un environnement de développement donc test à faire au préalable :)
Utilisateur anonyme
27 févr. 2008 à 15:02
27 févr. 2008 à 15:02
Alors, je vais essayer de faire simple :
En java, "une bonne programmation" consiste à ajouter une méthode toString() à tes classes.
En effet dans l'instruction suivante :
System.out.println("Mon fichier élèves après ajout : " + MonFichierEleve);
le système exécute en fait MonFichierEleve.toString().
Il faut donc que tu rajoutes une méthode dans ta classe FichierEleves comme suit :
public String toString(){
return ListeEleves.toString();
}
La méthode toString de l'objet Vector premet d'afficher la liste de tous ces éléments. En d'autres termes la méthode toString de Vector appelle la méthode toString de tous les éléments qu'il contient.
Il faut donc que tu rajoute une méthode toString dans ta classe Eleve comme suit :
public String toString(){
return "Nom : "+getNom()+" Prénom : "+getPrenom()+" Note : "+getNote();
}
Ca devrait bien marcher maintenant ;-)
En java, "une bonne programmation" consiste à ajouter une méthode toString() à tes classes.
En effet dans l'instruction suivante :
System.out.println("Mon fichier élèves après ajout : " + MonFichierEleve);
le système exécute en fait MonFichierEleve.toString().
Il faut donc que tu rajoutes une méthode dans ta classe FichierEleves comme suit :
public String toString(){
return ListeEleves.toString();
}
La méthode toString de l'objet Vector premet d'afficher la liste de tous ces éléments. En d'autres termes la méthode toString de Vector appelle la méthode toString de tous les éléments qu'il contient.
Il faut donc que tu rajoute une méthode toString dans ta classe Eleve comme suit :
public String toString(){
return "Nom : "+getNom()+" Prénom : "+getPrenom()+" Note : "+getNote();
}
Ca devrait bien marcher maintenant ;-)
Stargirlfr
Messages postés
1175
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
12 février 2017
357
27 févr. 2008 à 15:29
27 févr. 2008 à 15:29
Wow ! GENIAL !!!!!!
MERCI ENCORE BEAUCOUP à vous 2 qui m'avez énormément aider !
La méthode toString() marche nickel !
Je continue mon programme ! J'ai encore pas mal de choses à faire, notamment des méthodes de tris... et je ne sais pas encore comment je vais m'y prendre, mais je vais y réfléchir ;-)
Encore merciiiiii
MERCI ENCORE BEAUCOUP à vous 2 qui m'avez énormément aider !
La méthode toString() marche nickel !
Je continue mon programme ! J'ai encore pas mal de choses à faire, notamment des méthodes de tris... et je ne sais pas encore comment je vais m'y prendre, mais je vais y réfléchir ;-)
Encore merciiiiii