|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
Bonjour,
je suis débutant en Java (et en programmation d'ailleurs). Je souhaite faire une arraylist d'objet. Ces objets sont chargés par un ficher csv. une ligne = un objet. Le problème est que l'implémentation de mes objets ne fonctionnent pas comme je voudrais... J'ai 3 lignes donc 3 objets. Je crée mes objets 1 à 1 et je verifie. Lorsque j'ai intégré mes objets, je veux lire mon arraylist et c'est là que je trouve un problème... exemple : Equipement equip = new Equipement("...") à chaque ligne.. equip1 = @mem1 equip2 = @mem2 equip3 = @mem3 Quand je lis mon arraylist je retrouve : @mem1 : contenu de equip3 @mem2 : contenu de equip3 @mem3 : contenu de equip3 Je comprend donc que mes objets sont crées car ils ont des @ mémoires différentes mais ils ont tous le contenu du dernier objet intégré (içi equip3). J'ai beau cherché l'erreur.. je ne comprend pas... Voici la méthode que j'utilise pour créer mes objets : Code :
Merci d'avance pour votre aide. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Salut,
Il doit y avoir une erreur dans le code souligné en rouge : Code :
Mais difficile de t'aider pour l'instant ! a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
||
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
Désolé, je pensais que ce n'était pas utile.
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 331 ![]() |
Il n'y a pas de soucis je pense dans le code donné... Donc le soucis doit se trouver dans le code qui l'appelle
P.S. : - tes variables sont nommées trop courtes a mon avis -> aucun sens -> peu de lisibilité - tes variables servent à qqchose ? (je suppose que tu n'as pas mis tout le code). Parce que là pourquoi ne pas faire new Equipement(temp[0],temp[1),...) ?
__________________
Program manager chez TraceOne. http://www.traceone.com |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() |
Es-tu sur d'appeler chaque fois avec une ligne différente? Comment fais-tu pour afficher tes donnée et conclure qu'il n'y a que la dernière ligne? On peux voir le code de Equipement aussi? Tu n'aurais pas défini ses champs en statiques par hasard?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Citation:
Citation:
Par exemple il est plus lisible de lire new User(firstName,lastName) que new User(temp[0],temp[1]). Maintenant ce qui me fait peur, c'est que toutes cas variables devrait être des variables locales or ce n'est pas le cas : où sont-elle définis ? Et en voyant qu'il y a une ArrayList<Equipement> p qui semble défini en attribut d'instance je crains qu'il n' s'agisse d'une mauvaise portée de variable... a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
||
|
00
|
|
|
#7 | ||||||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
Bonjour, tout d'abord je vous remercie pour vos réponses.
j'ai en effet déclaré mes variable en static. (cela pose t'il problème?) Voici ma class Equipement : Code :
Code :
Code :
Les 3 lignes avec verification du contenu. @ mémoire de l'objet : contenu de l'objet ----------- Lecture de mon Arraylist : @ mémoire de l'objet : contenu de l'objet ligne 0 : TUTU|BIBU005|online|succeeded|2012-12-16 05:00:22.524| rapportcsv.Equipement@5d173 : TUTU BIBU005 online succeeded 2012-12-16 05:00:22.524 null 0 ------------------ ligne 1 : TUTU|BIBU001|online|failed|2012-12-16 02:03:16.355|Device Backup communication failure. rapportcsv.Equipement@1f9dc36 : TUTU BIBU001 online failed 2012-12-16 02:03:16.355 Device Backup communication failure. 1 ------------------ ligne 2 : TOTO|TITO006|offline||| rapportcsv.Equipement@e86da0 : TOTO TITO006 offline null null null 2 ------------------ rapportcsv.Equipement@5d173 : TOTO TITO006 offline null null null 2 rapportcsv.Equipement@1f9dc36 : TOTO TITO006 offline null null null 2 rapportcsv.Equipement@e86da0 : TOTO TITO006 offline null null null 2 Comme je l'ai dit donc.. J'ai l'impression que mes objets sont bien intégrés à mon Arraylist "p" mais le contenu n'est pas bon... Merci de votre aide. |
||||||
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
(Ou, pour le dire autrement, ces variables sont créées uniques et non pas une par objet : si on en change une, on la change pour tout le programme et non pas pour un seul objet.) C'est à ça que sert static. La seule raison qui aurait pu te pousser à mettre static, c'est que tu ne voulais pas que tes objets puissent avoir des valeurs différentes.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais. Partagez vos connaissances, mais aussi comment s'en servir. |
|
|
|
00
|
|
|
#9 | |||||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Citation:
Un champs static est indépendant de l'instance, et unique à l'application, donc cela ne correspond pas à ton besoin :
Sinon, rien à voir mais ton traitement des ressources et des erreurs dans le main est incorrect (par exemple en cas de FileNotFoundException tu obtiendras un NullPointerException). Avec Java 1.6 ou inférieur, la règle la plus simple pour faire cela proprement étant d'utiliser un bloc try/finally par ressource, et d'utiliser un try/catch englobant le tout pour traiter toutes les exceptions en un seul lieu : Code :
Code :
a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
|||||
|
00
|
|
|
#10 | ||||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
Je vous remercie pour vos réponses.
J'ai suivi vos conseils pour les variables d'instance dans ma classe Equipement ainsi que pour le try/finally try/catch. j'ai donc pu continuer. J'ai basculé mon main dans une methode insereFic dans ma class Outils afin de pouvoir créer mes objets. Code :
Je doit comparer les objets des arraylist, voir s'il y a eu des modifications entre chaques objets, faire des compteurs, ect... J'ai commencé à faire ma méthode compareParc: Code :
J'ai cependant plusieurs soucis : _ Comment puis-je récupérer les @dresse mémoires des arraylist? (pour pouvoir les parcourir dans ma méthode compareParc()). _ La compléxité va être conséquente... (mes fichiers font 5k lignes, donc 5k objets...) (J'avais pensé comparer ligne par ligne (getId dans mes objets), mais il se trouve que les objets peuvent ne pas arriver dans le meme ordre). Si vous avez une meilleur solution pas trop compliqué, je suis preneur(comme je vous l'ai dit, je débute en programmation). Merci pour vos conseils. |
||||
|
|
00
|
|
|
#11 | ||
![]() ![]() |
Citation:
Ces arraylist sont des objets, passe-les en paramètre de ta méthode de la même manière que tu passerais n'importe quel paramètre. Pourquoi imaginer autre chose que ça ? Citation:
Ça te fait une complexité proche de O(2n + m) au lieu de la complexité O(n x m) des boucles imbriquées. Pour un coût en mémoire sensiblement plus élevé mais pas exagéré.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais. Partagez vos connaissances, mais aussi comment s'en servir. |
||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Citation:
On ne joue pas avec les adresses mémoires en Java ! Que veux-tu faire avec cela ??? Citation:
5K lignes cela ne me semblent pas énorme, donc perso j'opterais pour tout charger en mémoire (à moins que tu ne tournes sur un environnement restreint de ce coté là). a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
||
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
En faites, je ne vois pas comment passer en paramétre mes arraylist.
Puisque j'utilise ma méthode insereFic() pour intégrer mes deux fichiers (je crée donc 2 arraylist p). Comment les appeler ensuite dans ma méthode compareParc(p1,p2)? Désolé si je ne suis pas trés clair,quand je parle d'adresse mémoire (cela se nomme peut être "pointeur"?) |
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Ben... il suffit que la méthode insereFic() retourne la liste :
Code :
Je te conseille vivement de te plonger dans un cours Java a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
||
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 6 ![]() |
Bonjour et merci pour vos réponses.
Désolé pour ces questions un peu idiotes, comme je vous l'ai dit je debute en programmation (3mois) et c'est mon premier programme perso sans être dirigé... Je retiens l'idée de HashMap pour plus tard (optimisation). Merci encore pour votre aide. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com