Bonsoir,
A l'approche de Noël, avec un petit groupe d'amis on a eu l'idée d'organiser une soirée où chacun devait offrir un cadeau à une autre personne du groupe. Cela s'est déroulé de manière classique, à la courte paille ; mais désireux d'utiliser mes faibles connaissances en informatique, je m'étais dit "pourquoi pas créer un programme java pour ça ? Ca peut être marrant !"
Alors j'ai pris mon courage à deux mains et j'ai tenté de m'y mettre.
Avant de vous montrer mon problème, voilà l'idée que j'avais :
1) Créer un ArrayList d'objets Perso (où Perso a trois variables String : nom/mail/gift). L'idée est que le nom est celui qui offre le cadeau, mail son adresse mail, et gift la personne qui reçoit le cadeau.
2) Créer un deuxième ArrayList de String, qui va reprendre tous les noms, les mélanger, pour après assigner un "gift" à chaque Perso.
Voilà mon code :
En ajoutant un System.out.print pour voir ce qu'ont les différents Perso dans leur variable gift respective, j'aimerais vérifier que tout le monde a bien une personne à qui offrir un cadeau, sans que ce soit eux-mêmes ^^
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 /** * @author : pamp. */ import java.util.ArrayList ; import java.util.Collections ; public class TestRandom { private static ArrayList<Perso> p = new ArrayList<Perso>() ; private static ArrayList<String> l = new ArrayList<String>() ; private static Perso p_1 = new Perso("Nom1", "mail", null) ; private static Perso p_2 = new Perso("Nom2", "mail2", null) ; private static Perso p_3 = new Perso("Nom3", "mail3", null) ; private static Perso p_4 = new Perso("Nom4", "mail4", null) ; private static Perso p_5 = new Perso("Nom5", "mail5", null) ; private static Perso p_6 = new Perso("Nom6", "mail6", null) ; public static void main(String[] args) { // On ajoute les personnes du tirage au premier ArrayList. p.add(p_1) ; p.add(p_2) ; p.add(p_3) ; p.add(p_4) ; p.add(p_5) ; p.add(p_6) ; // On crée une autre liste (de String) comportant tous les noms. // Elle servira, après avoir été mélangée, à lié chaque personne avec la personne à qui offrir le cadeau. for (int i = 0 ; i < p.size() ; i++) { l.add( ((Perso) p.get(i)).getNom()); } // On mélange la liste créée précédemment via la méthode shuffle(ArrayList). shuffle(l) ; //On met chaque nom obtenu dans le tableau l (personnes recevant le cadeau) dans les objets Perso // contenus dans le tableau p. for (int j = 0 ; j < p.size() ; j++) { ( (Perso) p.get(j) ).setGift(l.get(j)) ; } } // Méthode de tri aléatoire (sans redondance). public static ArrayList shuffle(ArrayList<String> l) { int err = l.size(); while (err != 0) { for (int i = 0 ; i < l.size() ; i++) { if ( ((Perso) p.get(i)).getNom() != (l.get(i)) ) { err-- ; } else { err = l.size() ; Collections.shuffle(l) ; } } } return l ; } }
Mais voilà le problème (oui, fini l'introduction interminable !) :
Parfois, BlueJ fait fonctionner le programme sans problème, quasiment instantanément, mais parfois, il met des heures (je ne sais pas exactement combien de temps, je l'arrête toujours après 15/20 minutes :p )
En espérant avoir votre aide, autant au niveau de mon problème de temps, mais également si vous avez des idées pour "épurer" mon programme
Ryce.
PS : Après avoir fini mon message, je me suis rendu compte que je ne l'ai pas mis dans la bonne section... Si une bonne âme pouvait me dire comment le changer de section, ou si un modérateur passe par là![]()
Partager