Recherche dans un tableau d'objet POO

a marqué ce sujet comme résolu.

Bonjour, j’ai besoin de votre aide svp pour résoudre ce problème.

un programme java qui permet la gestion des associations et de leurs adhérents une classe Adherent Son nom (nom) de type chaîne de caractères, Son prénom (prenom) de type chaîne de caractères, Son année d’adhésion (anneeAd) de type entier et Son code (code) de type entier.

une classe Association Son nom (nom) de type chaîne de caractères, L’année de sa création (dateCreation) de type entier, Le nombre de ses adhérents (nbAdherents) de type entier et L’ensemble de ses adhérents (adherents) de type tableau d’adhérents.

Je dois répondre à la consigne suivante Une méthode verifAdherent, qui vérifie la présence d’un adhérent dans la liste des membres de l’associations. (La recherche doit se faire dans un tableau d’objet ) Merci de bien vouloir m’aider

ça fait deux mois que j’ai commencé ma formation en informatique, c juste cette question qui m’a bloqué. qui sait peut être après une année c’est moi qui va répondre au question et aider les gens dans ce forum. Merci voila ma réponse mais je sais que c pas la bonne réponse c juste un essai

public int verifAdherent(String nomAdherent)
        {
        
        int i=0;
        for (i=0; i<this.tabAdherent.length -1;i++)
        {
        if(nomAdherent == tabAdherent[i].getNom())
        {
            break;
        }
        }
        if(i == this.tabAdherent.length)
        {
            return -1;
        }
        else 
        {
            return i;
        }
        
}

Amaury : mise en couleur du code, n’hésite pas à modifier ton message pour voir comment on fait.

+0 -0

Qu’est-ce qui ne fonctionne pas exactement avec ta solution ?

Une note: lorsque tu compares des chaines de caractères, tu devrais plutôt utiliser str1.equals(str2). Si tu utilises ==, ça vérifie que les références sont les mêmes tandis que equals vérifie uniquement le contenu.

+1 -0

Si tu as commencé ta formation depuis 2 mois, je me permet de te donner un conseil par rapport à ton code (même si j’imagine que c’est le formateur qui vous a montré ce mot clé).

Évite d’utiliser les break sauf dans un switch, ou les continue parce que ça casse la structure du code (voir code spaghetti qui est une bad practice).

Des développeurs te diront que c’est pratique… c’est un débat. Un for c’est quand tu sais le nombre de fois où tu vas parcourir ton tableau, un break casse ta condition, dans ce cas, plutôt utiliser un while avec une meilleur condition de sortie.

Ex.

public int verifAdherent(string nomAdherent){
    int idx = 0;
    int findAt = -1;
    while (idx < this.tabAdherent.length && findAt == -1){
        if(nomAdherent.equals(this.tabAdherent[idx].getNom())){
            findAt = idx;
        }
        idx++;
    }
    return findAt;
}

Tu gagneras en lisibilité et avec une structure de code plus cohérente

+0 -0

On peut très bien utiliser for avec « une meilleure condition de sortie ». L’avantage du for est de regrouper initialisation, condition et itération en un seul est même endroit.

public int verifAdherent(string nomAdherent){
    int findAt = -1;
    for (int idx = 0; idx < this.tabAdherent.length && findAt == -1; idx++){
        if(nomAdherent.equals(this.tabAdherent[idx].getNom())){
            findAt = idx;
        }
    }
    return findAt;
}

Mais pour ce genre de fonction, utiliser break ou return évite justement de faire des conditions inutiles tout en simplifiant le flux du code.

public int verifAdherent(string nomAdherent){
    for (int  idx = 0; idx < this.tabAdherent.length; idx++){
        if(nomAdherent.equals(this.tabAdherent[idx].getNom())){
            return idx;
        }
    }
    return -1;
}

La charge cognitive est beaucoup moins grande qu’une variable qui change d’état pour indiquer une fin de boucle.

Ce qui nuit à la lisibilité dans boucle contenant des break ou des continue est quand ceux-ci se situent au milieu du code. continue est par exemple un pattern fréquent pour filtrer certaines valeurs au début des boucles. Lorsque la boucle ne contient que quelques lignes, il n’y a généralement pas de problème pour suivre le flux de code.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte