Tom's Guide > Forum > Programmation > [Résolu] Java Calendar = Calendar, ArrayList<Calendar>.add(Calendar)

[Résolu] Java Calendar = Calendar, ArrayList<Calendar>.add(Calendar)

Forum Programmation : [Résolu] Java Calendar = Calendar, ArrayList<Calendar>.add(Calendar)

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous,

j'ai un petit souci avec mes dates en Java, j'espère que vous pourrez m'aider:

Voici un extrait de mon code:

ArrayList<Calendar> start = new ArrayList<Calendar>();

Calendar startDate = newCalendar.getInstance()
startDate.set(Calendar.DATE, 15);
startDate.set(Calendar.MONTH, 4);
startDate.set(Calendar.YEAR, 2007);
tmp = Calendar.getInstance();

for (int i=0; i<3;i++){
start.add(startDate);
tmp = startDate;
tmp.add(Calendar.DATE,1);
tmp.add(Calendar.MONTH,1);
startDate = tmp;
}



En fait, ceci me pose deux problèmes:

Tout d'abord, si j'affiche startDate juste après la ligne "tmp.add(Calendar.DATE,1);" , je remarque que startDate a pris la nouvelle valeur de tmp.
J'ai trouvé une solution en remplaçant les "tmp = startDate" par des "tmp.setTime(startDate.getTime())" pour toutes les affectations. Ca fonctionne.

Maintenant, le deuxième souci, auquel je ne trouve pas de solution, se situe au niveau de l'injection dans la liste.
La valeur de startDate change au cours du temps, et à chaque changement, la valeur de chaque élément de la liste, vu qu'il a été injecté via la variable startDate, change aussi.
Ce qui fait qu'au final la liste contiendra une série de fois la dernière valeur prise par startDate.

Et là je ne sais pas comment faire en sorte que ce phénomène ne se produise pas.

J'ai essayé
start.add(new Calendar.getInstance());
suivi de:
- start.set(i,startDate) -> aucun changement évidemment
- start.get(i).setTime(startDate.getTime()); -> erreur


Voyez-vous une solution?

Un grand merci à vous


Message édité par towanda@IDN le 17-03-2007 à 10:59:28
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Citation :

Tout d'abord, si j'affiche startDate juste après la ligne "tmp.add(Calendar.DATE,1);" , je remarque que startDate a pris la nouvelle valeur de tmp.


Quand tu fais "tmp = startDate;", il me semble que tu ne copie que la référence et pas l'objet : tmp et startDate référencent en fait le même objet. Si tu en modifies un, tu modifies l'autre.
Le "tmp.setTime(startDate.getTime())" lui fait une copie.

Le second problème est le même.

Regarde s'il n'y a pas une méthode copy...()

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Trouvé!

tmp = startDate.clone();
start.add(startDate.clone());

Merci beaucoup Cricky!

Répondre à towanda@IDN
Tom's Guide > Forum > Programmation > [Résolu] Java Calendar = Calendar, ArrayList<Calendar>.add(Calendar)
Aller à :

Il y a 732 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens