IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Création d'un réseau social


Sujet :

avec Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut Création d'un réseau social
    Bonjour,

    J'essaye de créer un réseau social dans le cadre d'un exercice donné. On doit pouvoir ajouter des utilisateurs, ... , en utilisant les HashMap.

    J'ai réussi à implémenter les fonctions de mon code, cependant, lorsque je lance le programme, mon objet HashMap (qui représente le réseau social) se réinitialise à chaque demande, je ne comprends pas pourquoi.

    Je vous montre mon code ci-dessous, qui vous permettra peut-être de comprendre d'où vient mon problème.

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
     
    package tp_2;
     
    import java.util.*;
    import java.util.Map.Entry;
     
    public class Main {
    	static Scanner scanner = new Scanner(System.in);
    	static HashMap<String, ArrayList<String>> reseau = new HashMap<>();
    	public static int actionChoisie;
     
    	public static void main(String[] args) {
    		do {
    			System.out.println(
    					"Bienvenue dans votre réseau social !\n Tapez 1 pour ajouter un utilisateur au réseau social.\n Tapez 2 pour suivre un autre utilisateur.\n Tapez 3 pour lister tous les utilisateurs du réseau social.\n"
    							+
     
    							" Tapez 4 pour lister tous les utilisateurs suivis par un utilisateur donné.\n Tapez 5 pour lister tous les utilisateurs qui suivent un utilisateur donné.\n Tapez 6 pour arrêter de suivre un utilisateur pour un utilisateur donné.\n Tapez 7 pour supprimer un utilisateur du réseau social.\n Tapez 0 pour quitter. ");
    			while (scanner.hasNextInt() == false) {
    				System.out.println("Veuillez choisir un nombre compris entre 0 et 7");
    				scanner.nextLine();
    				scanner.hasNextInt();
    			}
    			actionChoisie = Integer.parseInt(scanner.nextLine());
    			System.out.println(menu(actionChoisie));
    			while (actionChoisie != 0 && actionChoisie != 1 && actionChoisie != 2 && actionChoisie != 3
    					&& actionChoisie != 4 && actionChoisie != 5 && actionChoisie != 6 && actionChoisie != 7) {
    				System.out.println("Veuillez choisir un nombre compris entre 0 et 7");
    				while (scanner.hasNextInt() == false) {
    					System.out.println("Veuillez choisir un nombre compris entre 0 et 7");
    					scanner.nextLine();
    					scanner.hasNextInt();
    				}
    				actionChoisie = Integer.parseInt(scanner.nextLine());
    				System.out.println(menu(actionChoisie));
    			}
     
    		} while (actionChoisie != 0);
     
    	}
     
    // Réseau social
    	public static int menu(int actionChoisie) {
     
    		if (actionChoisie == 0) {
    			quitterReseau();
    		} else if (actionChoisie == 1) {
    			ajoutUtilisateur();
    		} else if (actionChoisie == 2) {
    			suivreUtilisateur();
    		} else if (actionChoisie == 3) {
    			listerUtilisateurs();
    		} else if (actionChoisie == 4) {
    			listerUtilisateursSuivis();
    		} else if (actionChoisie == 5) {
    			listerUtilisateursSuiveurs();
    		} else if (actionChoisie == 6) {
    			arreterSuivi();
    		} else {
    			supprimerUtilisateur();
    		}
    		return 0;
    	}
     
    	public static void ajoutUtilisateur() {
    		System.out.println("Veuillez entrer le nom de la personne que vous souhaitez ajouter au réseau : ");
    		String nomUtilisateur = scanner.nextLine();
    		int cpt = 0;
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(nomUtilisateur)) {
    				System.out.println("La personne que vous souhaitez ajouter au réseau y est déjà présente.");
    				cpt++;
    			}
    		}
    		if (cpt == 0) {
    			while (it.hasNext()) {
    				Entry<String, ArrayList<String>> e = it.next();
    				ArrayList personnesSuivies = new ArrayList<String>();
    				reseau.put(nomUtilisateur, personnesSuivies);
    			}
    		}
    	}
     
    	public static void suivreUtilisateur() {
    		int cpt1 = 0;
    		int cpt2 = 0;
    		System.out.println("Quel est le nom du premier utilisateur ?");
    		String nom1 = scanner.nextLine();
    		System.out.println("Quel est le nom du deuxième utilisateur ?");
    		String nom2 = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(nom1)) {
    				cpt1++;
    				System.out.println("L'utilisateur " + nom1 + " est dans le réseau social.");
    			}
    		}
    		if (cpt1 == 0) {
    			System.out.println("L'utilisateur " + nom1 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList<String> listeSuivis1 = new ArrayList<>();
    			reseau.put(nom2, listeSuivis1);
    		}
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(nom2)) {
    				cpt2++;
    				System.out.println("L'utilisateur " + nom2 + " est dans le réseau social.");
    			}
    		}
    		if (cpt2 == 0) {
    			System.out.println("L'utilisateur " + nom2 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList<String> listeSuivis2 = new ArrayList<>();
    			reseau.put(nom2, listeSuivis2);
    		}
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(nom1)) {
    				if (e.getValue().contains(nom2)) {
    					System.out.println("L'utilisateur " + nom1 + " suit déjà l'utilisateur " + nom2);
    				} else {
    					e.getValue().add(nom2);
    				}
    			}
    		}
     
    	}
     
    	public static void listerUtilisateurs() {
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			System.out.println(e.getKey());
    		}
    	}
     
    	public static void listerUtilisateursSuivis() {
    		int cpt = 0;
    		System.out
    				.println("Quel est l'utilisateur du réseau dont vous souhaitez lister les utilisateurs qu'il suit  ?");
    		String nomUtilisateur = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey() == nomUtilisateur) {
    				cpt++;
    				System.out.println(e.getValue());
    			}
    		}
    		if (cpt == 0) {
    			System.out.println(" L'utilisateur n'est pas dans le réseau social");
    		}
    	}
     
    	public static void listerUtilisateursSuiveurs() {
    		System.out.println("Quel est l'utilisateur dont vous voulez connaitre les suiveurs ? ");
    		String nom = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getValue().contains(nom)) {
    				System.out.println(e.getKey());
    			}
    		}
     
    	}
     
    	public static void arreterSuivi() {
    		int cpt = 0;
    		System.out.println("Quel est le premier utilisateur ?");
    		String nom1 = scanner.nextLine();
    		System.out.println("Quel est le nom du deuxième utilisateur ?");
    		String nom2 = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(nom1)) {
    				if (e.getValue().contains(nom2)) {
    					reseau.remove(nom1, nom2);
    					cpt++;
    				}
    			}
    		}
    		if (cpt == 0) {
    			System.out.println("L'utilisateur " + nom1 + " ne suit pas l'utilisateur " + nom2 + " ");
    		}
    	}
     
    	public static void supprimerUtilisateur() {
    		int cpt = 0;
    		System.out.println("Quel utilisateur souhaitez-vous supprimer du réseau ?");
    		String utilisateurASupprimer = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getKey().equals(utilisateurASupprimer)) {
    				reseau.remove(e);
    				cpt++;
    			}
    		}
    		if (cpt == 0) {
    			System.out.println("L'utilisateur que vous souhaitez supprimer n'est pas sur le réseau ");
    		}
    	}
     
    	public static void quitterReseau() {
    		System.out.println("ARRET DES SAISIES ***");
    	}
     
    }
    En vous remerciant d'avance pour votre aide.
    Bien cordialement.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Gabriel_Enriquezdu67 Voir le message

    J'essaye de créer un réseau social dans le cadre d'un exercice donné. On doit pouvoir ajouter des utilisateurs, ... , en utilisant les HashMap.

    J'ai réussi à implémenter les fonctions de mon code, cependant, lorsque je lance le programme, mon objet HashMap (qui représente le réseau social) se réinitialise à chaque demande, je ne comprends pas pourquoi.
    Parce qu'il n'y a aucune persistence. A chaque exécution, la HashMap est créée vide en mémoire. Il n'y a aucune raison qu'elle se "souvienne" ce qu'on a mis de dedans lors d'une autre exécution (précédente ou concurrente d'ailleurs). Il faut que tu passes par exemple par un fichier pour stocker le contenu de la Map entre deux exécutions (ou tout autre système de persistance).

    Par ailleurs,

    1. utiliser une Map et retrouver une valeur associée à une clef en parcourant les entrées (Map.entrySet()) ou les clefs (Map.keySet()), ou les valeurs (Map.values()) n'est une bonne manière de faire : tu contournes l'intérêt d'avoir une Map (autant avoir une liste), et l'algorithme d'accès par la clef (optimisé par arbre de hashage pour une HashMap).
      Accède directement à la valeur par Map.get(key), ou teste l'existence d'une valeur par Map.containsKey(key).

    2. Attention : ne jamais modifier le contenu d'une HashMap pendant qu'on parcourt ses clefs, ses valeurs, ou ses entrées...

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      		while (it.hasNext()) {
      			Entry<String, ArrayList<String>> e = it.next();
      			if (e.getKey().equals(nom1)) {
      				if (e.getValue().contains(nom2)) {
      					reseau.remove(nom1, nom2);
      					cpt++;
      				}
      			}
      		}
      Hormis que remove(nom1,nom2) ne risque pas de fonctionner, puisque reseau est une Map<String, List<String>>, et que nom2 est un String, chercher à supprimer des entrées pendant qu'on parcourt l'entrySet risque de soulever une ConcurrentModificationException. Tu peux passer la méthode remove() de Iterator pour supprimer une entrée quand on parcourt un entrySet. Dans ton cas, le code devrait supprimer nom2 dans la liste associée à nom1, puis éventuellement si cette liste est vide, supprimer l'entrée, via l'itérateur. Autant passer par un reseau.get(nom1), tu n'auras même pas ce problème à gérer.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    Merci beaucoup pour ta réponse,

    J'ai un peu arrangé mon code pour ce qui est du parcours de ma HashMap.

    Cependant, je ne comprends pas comment créer un fichier afin de stocker les changements de ma HashMap à chaque tour, j'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static Set<String> cles = reseau.keySet();
    public static Collection<ArrayList<String>> valeurs = reseau.values();
    c'est-à-dire en stockant à chaque tour dans la fonction menu() les changements des Key d'une part et des Values de l'autre par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    reseau.keySet().addAll(cles);
    reseau.values().addAll(valeurs);
    au début de la fonction menu(), et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		cles = reseau.keySet();
    		valeurs = reseau.values();
    à la fin de la fonction, mais cela me renvoie un message d'erreur.

    Mon essai étant resté infructueux, je ne sais donc malheureusement pas comment m'y prendre pour stocker le contenu de la Map.

    Aurais-tu des pistes qui pourraient m'aider à résoudre ce problème ?

    En te demandant de bien vouloir m'excuser pour mon mauvais niveau en Java et en te remerciant d'avance pour ta réponse.

    Bien cordialement.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Gabriel_Enriquezdu67 Voir le message
    Cependant, je ne comprends pas comment créer un fichier afin de stocker les changements de ma HashMap à chaque tour, j'ai essayé avec :
    On peut sauvegarder la map à chaque tour, ou simplement le faire à la fin du programme (quand on sélectionne le choix 0 dans le menu principale) (bien sûr en cas d'erreur dans le programme qui provoque son arrêt prématuré, on va perdre tout ce qu'on a fait depuis le début du programme).

    Je ne vois pas pourquoi tu aurais une réinitialisation à chaque tour... en revanche, en regardant je vois ce problème :

    Ligne 151 dans ton code initial (listerUtilisateursSuivis)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (e.getKey() == nomUtilisateur) {
    				cpt++;
    				System.out.println(e.getValue());
    			}
    On ne compare jamais des String avec == mais avec equals(). Ceci peut te donner l'impression que tu as perdu le contenu de la map, parce que la condition est fausse, mais ce n'est pas le cas. Cela ne t'arrivera pas avec des Map.get(key).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List<String> utilisateursSuivis = reseau.get(nomUtilisateur);
    if ( utilisateursSuivis==null ) {
        System.out.println("Pas d'utilisateurs suivis");
    }
    else {
        System.out.println(utilisateursSuivis);
    }

    Citation Envoyé par Gabriel_Enriquezdu67 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static Set<String> cles = reseau.keySet();
    public static Collection<ArrayList<String>> valeurs = reseau.values();
    c'est-à-dire en stockant à chaque tour dans la fonction menu() les changements des Key d'une part et des Values de l'autre par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    reseau.keySet().addAll(cles);
    reseau.values().addAll(valeurs);
    au début de la fonction menu(), et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		cles = reseau.keySet();
    		valeurs = reseau.values();
    à la fin de la fonction, mais cela me renvoie un message d'erreur.
    Il ne faut pas dissocier les clefs et les valeurs. Tu ne peux pas ajouter les clefs d'une part et les associations d'une autre. Comment la map pourrait-elle refaire le lien entre clef et valeur ?

    La première chose à faire quand on parle de fichier, c'est décider du format de fichier. Ce qui implique des conditions sur les informations à stocker.
    Par exemple, on pourrait décider d'utiliser un simple fichier texte. Chaque ligne stockera une association, nom / liste de noms, sous la forme la clef = une liste de valeurs séparées par des virgules :
    nom1=nom2,nom3
    nom2=nom1
    nom3=nom1
    On voit qu'on ne peut pas avoir de virgule dans un nom, parce qu'on ne saura plus retrouver les noms dans une liste de noms, sauf en traitant d'abord les clefs, puis, en faisant des trucs compliqués pour éliminer les noms dans ce qu'il y après le = qui n'existent pas en clef, et les fusionnant avec la ou les valeurs suivantes, etc. Bref, autant se simplifier la vie en éliminant la possibilité d'avoir une virgule dans le nom, ce qui finalement n'existe pas à priori. On veillera bien à l'empêcher lors de la saisie d'un nouveau nom, sinon le fichier ne pourra pas être relu correctement. On peut aussi utiliser un format structuré (du XML, du JSON...) qui traite très bien l'échappement des caractères pour éviter les possibles ambiguïtés à la relecture.

    A partir de là, écrire le fichier est très simple. Il suffit de créer les lignes on parcourant les entrées et avec un PrintWriter, ça sera similaire à ce qu'on ferait pour afficher ça dans une console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try(PrintWriter output = new PrintWriter(Files.newBufferedWriter(Paths.get("reseau.txt"), StandardCharsets.UTF_8))) {
        for(Map.Entry<String,List<String>> entry : reseau.entrySet()) {
            output.print(entry.getKey()); // on écrit le nom
            output.print('='); // on écrit le =
            List<String> list = entry.getValue();
            for(int i=0; i<list.size(); i++) {
                if ( i>0 ) { // on doit mettre une virgule entre chaque nom, sauf pour le premier nom qui suit le =
                    output.print(','); // on écrit la virgule séparatrice de noms
                }
                output.print(list.get(i)); // on écrit le nom dans la liste à la position i
            }
            output.println(); // on passe à la ligne
       }
    }
    Pour lire le fichier, après avoir tester son existence bien sûr, on le lira ligne à ligne et on créera chaque entrée à partir de chaque ligne en utilisant un String.split() pour retrouver chaque partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try(BufferedReader input = Files.newBufferedReader(Paths.get("reseau.txt"), StandardCharsets.UTF_8)) {
        for(String line = input.readLine(); line!=null; line = input.readLine()) {
            String[] nomliste = line.split("="); // pour avoir le nom d'une part, la liste de l'autre
            String[] listedenoms = nomliste[1].split(","); // pour avoir les noms de la liste séparés
            reseau.put( nomliste[0], new ArrayList<>( Arrays.asList(listedenoms)) ); // on met dans la map l'association clef/valeur correspondante
        }
    }
    NB: tu remarqueras que je ne fais pas reseau.put( nomliste[0], Arrays.asList(listedenoms) ); parce que Arrays.asList() retourne une liste dans laquelle tu ne pourras pas ajouter de nouveaux noms, et que du coup, ça t'empêchera d'utiliser certaines des fonctions pour ajouter des suivis, ou supprimer, etc. On aura pu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ArrayList<String> list = new ArrayList<>();
    for(String nom : listedenoms ) {
        list.add(nom);
    }
    reseau.put( nomliste[0], list ); // on met dans la map l'association clef/valeur correspondante
    Tu peux bien sûr remplacer le nom en dur du fichier par une variable, qui pourrait même être initialisée avec une valeur passée en paramètre de ton appel de programme. Avec un nom de fichier relatif comme j'ai fait, le fichier sera stocké dans le dossier de travail du programme (dans un IDE le dossier du projet, sinon, le dossier de lancement du programme).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    Merci beaucoup pour ta réponse qui m'a beaucoup aidé et qui m'a permis de bien avancer dans la rédaction de mon code,

    Maintenant, grâce à tes conseils, mon code marche, mis à part un petit problème dont je n'arrive pas à comprendre l'origine dans la fonction suivreUtilisateur().

    Lorsque j'essaie de faire suivre un joueur "nom2" par un joueur "nom1", j'ajoute nom2 dans la liste des joueurs suivis par nom1, via le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reseau.get(nom1).add(nom2);
    , cependant, ceci a pour effet d'ajouter "nom1" dans la liste des joueurs suivis par "nom1".

    Voici toute ma fonction suivreUtilisateur() :

    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
    public static void suivreUtilisateur() {
    		System.out.println("Quel est le nom du premier utilisateur ?");
    		String nom1 = scanner.nextLine();
    		System.out.println("Quel est le nom du deuxième utilisateur ?");
    		String nom2 = scanner.nextLine();
    		if (reseau.containsKey(nom1) == false) {
    			System.out.println("L'utilisateur " + nom1 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList personnesSuivies1 = new ArrayList<String>();
    			reseau.put(nom1, personnesSuivies1);
    		} else {
     
    		}
    		if (reseau.containsKey(nom2) == false) {
    			System.out.println("L'utilisateur " + nom2 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList personnesSuivies2 = new ArrayList<String>();
    			reseau.put(nom2, personnesSuivies2);
    		} else {
     
    		}
     
    		if(reseau.get(nom1).contains(nom2) == false) {
    			System.out.println("L'utilisateur " + nom1 + " ne suit pas l'utilisateur " + nom2
    					+ ". On va donc créer ce lien entre les deux utilisateurs");
    			 reseau.get(nom1).add(nom2);			
    		}  else {
    			System.out.println("L'utilisateur " + nom1 + " suit déjà l'utilisateur " + nom2);
     
    		}
     
    	}
    En te remerciant d'avance pour ta réponse,

    Bien cordialement.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Gabriel_Enriquezdu67 Voir le message
    , cependant, ceci a pour effet d'ajouter "nom1" dans la liste des joueurs suivis par "nom1".
    Je ne vois pas dans le code de suivreUtilisateur() ce qui pourrait expliquer ça. Ça peut venir d'une autre méthode, ou ça peut venir de la façon que tu utilises pour le savoir : qu'est-ce qui te fait penser que "nom1" se trouve dans la liste des joueurs suivis par "nom1" ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    Ce sont les méthodes listerUtilisateursSuivis()( qui me permet d'afficher la liste des utilisateurs suivis par une personne), et listerUtilisateursSuiveurs() (qui me permet d'afficher les utilisateurs suiveurs d'une personne), qui me permettent de savoir que ce problème existe.

    Pourtant quand je regarde leurs codes, je ne vois pas de problème :

    Voici le code de la fonction listerUtilisateursSuivis() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void listerUtilisateursSuivis() {
    		System.out
    				.println("Quel est l'utilisateur du réseau dont vous souhaitez lister les utilisateurs qu'il suit  ?");
    		String nomUtilisateur = scanner.nextLine();
    		List<String> utilisateursSuivis = reseau.get(nomUtilisateur);
    		if (utilisateursSuivis == null) {
    			System.out.println("Pas d'utilisateurs suivis");
    		} else {
    			for(int k = 0; k < utilisateursSuivis.size(); k ++) {
    				System.out.println(utilisateursSuivis.get(k));
    			}
    		}
    	}
    et voici celui de la fonction listerUtilisateursSuiveurs() :
    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
    public static void listerUtilisateursSuiveurs() {
    		int cpt = 0;
    		System.out.println("Quel est l'utilisateur dont vous voulez connaitre les suiveurs ? ");
    		String nom = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getValue().contains(nom)) {
    				System.out.println(e.getKey());
    				cpt++;
    			}
    		}
    		if(cpt == 0) {
    			System.out.println("L'utilisateur "+nom+" n'a pas de suiveurs");
    		}
     
    	}

    Bien cordialement.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    J'ai mis tes méthodes en œuvre dans une petite classe de test :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public class Test {
     
    	private static Scanner scanner = new Scanner(System.in);
    	private static Map<String, ArrayList<String>> reseau = new HashMap<>();
     
    	public static void main(String[] args) {
    		suivreUtilisateur();
    		listerUtilisateursSuivis();
    		listerUtilisateursSuiveurs();
    	}
     
    	public static void suivreUtilisateur() {
    		System.out.println("Quel est le nom du premier utilisateur ?");
    		String nom1 = scanner.nextLine();
    		System.out.println("Quel est le nom du deuxième utilisateur ?");
    		String nom2 = scanner.nextLine();
    		if (reseau.containsKey(nom1) == false) {
    			System.out.println("L'utilisateur " + nom1 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList personnesSuivies1 = new ArrayList<String>();
    			reseau.put(nom1, personnesSuivies1);
    		} else {
     
    		}
    		if (reseau.containsKey(nom2) == false) {
    			System.out.println("L'utilisateur " + nom2 + " n'est pas dans le réseau social. On va donc l'ajouter.");
    			ArrayList personnesSuivies2 = new ArrayList<String>();
    			reseau.put(nom2, personnesSuivies2);
    		} else {
     
    		}
     
    		if(reseau.get(nom1).contains(nom2) == false) {
    			System.out.println("L'utilisateur " + nom1 + " ne suit pas l'utilisateur " + nom2
    					+ ". On va donc créer ce lien entre les deux utilisateurs");
    			 reseau.get(nom1).add(nom2);			
    		}  else {
    			System.out.println("L'utilisateur " + nom1 + " suit déjà l'utilisateur " + nom2);
     
    		}
     
    	}
     
    	public static void listerUtilisateursSuivis() {
    		System.out
    				.println("Quel est l'utilisateur du réseau dont vous souhaitez lister les utilisateurs qu'il suit  ?");
    		String nomUtilisateur = scanner.nextLine();
    		List<String> utilisateursSuivis = reseau.get(nomUtilisateur);
    		if (utilisateursSuivis == null) {
    			System.out.println("Pas d'utilisateurs suivis");
    		} else {
    			for(int k = 0; k < utilisateursSuivis.size(); k ++) {
    				System.out.println(utilisateursSuivis.get(k));
    			}
    		}
    	}
     
    	public static void listerUtilisateursSuiveurs() {
    		int cpt = 0;
    		System.out.println("Quel est l'utilisateur dont vous voulez connaitre les suiveurs ? ");
    		String nom = scanner.nextLine();
    		Set<Entry<String, ArrayList<String>>> setHm = reseau.entrySet();
    		Iterator<Entry<String, ArrayList<String>>> it = setHm.iterator();
    		while (it.hasNext()) {
    			Entry<String, ArrayList<String>> e = it.next();
    			if (e.getValue().contains(nom)) {
    				System.out.println(e.getKey());
    				cpt++;
    			}
    		}
    		if(cpt == 0) {
    			System.out.println("L'utilisateur "+nom+" n'a pas de suiveurs");
    		}
     
    	}
    }

    J'obtiens :
    Quel est le nom du premier utilisateur ?
    nom1
    Quel est le nom du deuxième utilisateur ?
    nom2
    L'utilisateur nom1 n'est pas dans le réseau social. On va donc l'ajouter.
    L'utilisateur nom2 n'est pas dans le réseau social. On va donc l'ajouter.
    L'utilisateur nom1 ne suit pas l'utilisateur nom2. On va donc créer ce lien entre les deux utilisateurs
    Quel est l'utilisateur du réseau dont vous souhaitez lister les utilisateurs qu'il suit ?
    nom1
    nom2
    Quel est l'utilisateur dont vous voulez connaitre les suiveurs ?
    nom2
    nom1
    Ceci est bien cohérent et je n'ai pas nom1 qui suit nom1.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    Merci beaucoup pour ta réponse,

    J'ai trouvé d'où le problème venait, en fait, j'avais fait une erreur dans le code qui me permettait de stocker la Map dans le fichier, mais maintenant, le problème est résolu et le code fonctionne.

    En tout cas merci beaucoup pour ton aide qui m'a bien servi.

    Bien cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un réseau social
    Par MrFullbuster dans le forum Débuter
    Réponses: 1
    Dernier message: 04/06/2015, 16h24
  2. Réponses: 4
    Dernier message: 19/09/2014, 14h56
  3. Création d'un Réseau Social : Conseil et documentation ?
    Par seanp223 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 21/11/2011, 09h16
  4. Information création d'un réseau social 2.0
    Par harris_macken dans le forum Webmarketing
    Réponses: 7
    Dernier message: 27/03/2009, 07h35
  5. Réponses: 0
    Dernier message: 23/05/2008, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo