Se connecter / S'enregistrer
Votre question

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

Tags :
  • Java
  • Programmation
Dernière réponse : dans Programmation
16 Mars 2007 11:35:42

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

Autres pages sur : resolu java calendar calendar arraylist calendar add calendar

a b L Programmation
16 Mars 2007 20:12:10

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...()

17 Mars 2007 10:58:47

Trouvé!

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

Merci beaucoup Cricky!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS