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

Collection et Stream Java Discussion :

Aide Tableau Java


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Aide Tableau Java
    Bonjour,


    Merci de me dire si ce code est correct ou pas.et comment l'optimiser.

    Quelques détails sur le code :

    -J'ai déjà créé les class suivantes ocuments,Livre,Manuels,Romans,Revues,Dictionnaire.(avec tout ce qu'il faut).
    -je veux créer une class Biblio(qui gère un tableau de documents) avec les méthodes suivantes :
    - Constructeur Tableau.
    - Afficher les documents du tableau.
    - Afficher les auteurs(sachant que Auteur est un attribut de la class livre).
    - Ajout d'un document.

    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
    public class Biblio {
     
    	Documents tab[];
     
    public Biblio(int capacite)
    {
    	tab = new Documents[capacite];
    }
     
     
    public void afficherDocument()  //
    {
     
    	for (int i = 0; i<= tab.length;i++)
    	{
    		System.out.println(tab[i]);
    	}
    }
    public void afficherAuteur()
    {
    	int capacite=0;
    	tab =new Documents[capacite];
     
    	for(int i =0 ; i<= tab.length; i++)
    	{
    		System.out.println(tab[i].getNum_enregistrement());
    		if (tab[i] instanceof Livre)
     
    		System.out.println(" "+((Livre)tab[i]).getAuteur());	
     
    		else
     
    		System.out.println(" ");	
     
    	}
    }
    public boolean ajouter(Documents doc)
    {
    int i = 0;
    boolean trouvé = false;
     
    while(trouvé == false && i <= tab.length)
    {
    	if(tab[i].numEnregistrement==(doc.numEnregistrement))
     
    		trouvé = true;
    	else	i=i+1;
     
    }
    if(trouvé == true) return false;
    else return true;
     
    }
    }
    Merci

  2. #2
    Membre actif

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Points : 295
    Points
    295
    Par défaut
    Bonjour,

    personnellement, je changerais 3 choses dans ta classe :

    1. Ne pas utiliser un Array de documents mais une liste de documents :
    Tu l'initialises ensuite en ArrayList par exemple, cela te permet de ne pas bloquer ta liste de documents a un nombre définit mais de pouvoir en ajouter autant que tu le souhaites (via les méthodes de List, tu as donc les méthodes add, remove, size ou get, regarde la javadoc pour plus de détail).

    2. Je n'ai pas testé, mais je pense très fortement que ta méthode afficherAuteur ne marche pas.
    En effet, au début de la méthode, tu réinitialises tes documents avec une capacité de 0, normalement, tu ne rentres donc jamais dans la boucle for.
    L'utilisation de la classe List pour tes documents, te permettra de résoudre le problème.

    3. Dans la méthode ajouter, tu n'est pas obligé d'utiliser le boolean trouvé pour déterminer si tu retournes true ou false.
    Plutôt que ca, il te faut renvoyer true par défaut et si tu trouve dans la boucle une correspondance, alors tu renvoie false.
    Voici une version modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public boolean ajouter(Documents doc) {
     
        for (int i = 0 ; i < tab.length ; i++) {
    	if(tab[i].numEnregistrement==(doc.numEnregistrement))
                return false;
        }
        return true;
    }
    Sans oublier que les identifiants d'un tableau commencent a base 0.
    Ce qui veut dire qu'un tableau de taille 5 aura des identifiants de 0 a 4.
    Par conséquent, ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(trouvé == false && i <= tab.length)
    Devrait te donner une exception, il te faut arrêter a i < tab.length (ce problème se retrouvera aussi dans la classe List avec la méthode size)

  3. #3
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    je vais ajouter quelques conseils à ceux de henolivier.

    Ton tableau de documents tab (ou ta List) devrait avoir une visibilité private.

    Il est préférable d'utiliser les System.out.println() de manière exceptionnelle. Là, tu travailles avec une sortie console, mais tu peux très bien faire évoluer ton application pour avoir une interface graphique par exemple. Dans ce cas, tu pourrais vouloir afficher tes auteur dans un composant plutôt que sur la console.
    La solution dans ce cas est de construire ta chaîne de caractères (via un StringBuilder) puis de renvoyer une String. Ainsi, c'est à la méthode appelante de choisir où afficher le résultat.
    Cette remarque s'applique pour tes méthodes afficherAuteur et afficherDocument

    En ce qui concerne le nom des variables, tu dois proscrire les accents et autres caractères spéciaux. Cela pourrait te poser des problèmes.

    Et enfin, il est inutile de comparer un variable boolean avec true ou false.
    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(toto == true || titi == false)
    Tu peux écrire:
    Tu peux même aller plus loin en remplaçant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(trouve == true) return false;
    else return true;
    par

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    Merci pour les réponses.

    voici le code après avoir appliqué vos conseils.j'y ai ajouté deux méthodes :
    1- Permet de renvoyer le i eme document.
    2- Supprimer un document référencé par doc et renvoie true ,(false en cas d’échec).

    N.B :je suis obligé de travailler avec les tableaux.

    Code :
    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
    import java.util.Scanner;
     
     
    public class Biblio {
     
    	Documents tab[];
     
     
    	public Biblio(int capacite)
    {
    	tab = new Documents[capacite];
    }
     
     
     
    	public void afficherDocument()
    {
     
    	for (int i = 0; i< tab.length;i++)
    	{
    		System.out.println(tab[i]);
    	}
    }
     
     
    public void afficherAuteur()
    {
    	int capacite=tab.length;
    	tab =new Documents[capacite];
     
    	for(int i =0 ; i< tab.length; i++)
    	{
    		System.out.println(tab[i].getNum_enregistrement());
    		if (tab[i] instanceof Livre)
     
    		System.out.println(" "+((Livre)tab[i]).getAuteur());	
     
    		else
     
    		System.out.println(" ");	
     
    	}
    }
     
     
    public boolean ajouter(Documents doc)
    {
    for(int i=0; i < tab.length;i++)
    {
    	if(tab[i].numEnregistrement==(doc.numEnregistrement))
     
     
    	    return true;	
     
    	else  tab[i]=doc;	
     
    }
    return false;      
     
    }
     
     
    public Documents document(int i)
    {
    	Scanner sc = new Scanner(System.in);
    	int var=sc.nextInt();
     
    	for(int j=0; j < tab.length;j++)
    	{
    		if(tab[j].numEnregistrement==var)
    			return document(i);
    	}
    	return null;			
    }
     
     
    public boolean supprimer(Documents doc)
    {
    	for(int i=0; i < tab.length;i++)
    	{
    		if(tab[i].numEnregistrement==(doc.numEnregistrement))
     
    		    return true;	
     
    		for(int j=i;j<tab.length;j++)
    			tab[j]=tab[j-1];
     
    	}
    	       return false;      	
     
    }
     
    }
    Merci

  5. #5
    Membre régulier
    Homme Profil pro
    Nom
    Inscrit en
    Juin 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Nom

    Informations forums :
    Inscription : Juin 2006
    Messages : 90
    Points : 89
    Points
    89
    Par défaut
    Je renomerais déjà pas mal de choses:

    Une classe doit être au singulier !
    Documents -> Document
    tab -> documents
    ...

    * J'utiliserais une liste plutot qu'un tableau.

    * A chaque classe une seule fonction, il ne faut pas et gérer l'écriture a l'écran et
    traiter des informations ...



    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
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    /**
     *
     * @author Toto
     */
    public class Library {
     
        /**
         * Documents.
         */
        private List<Document> documents;
     
        /**
         * Create a library for a given capacity.
         * @param capacity maximal capacité
         */
        public Library(final int capacity) {
            documents = new ArrayList(capacity);
        }
     
        /**
         *
         * @return String representation to display
         */
        public String documentToString() {
            final StringBuilder builder = new StringBuilder();
            for (Document doc : documents) {
                if (doc instanceof Book) {
                    builder.append(doc.getAuthor());
                }
            }
            return builder.toString();
        }
     
        /**
         *
         * @return all auteru of livre
         */
        public String getAuhtor() {
            final StringBuilder author = new StringBuilder();
            for (Document unDocument : documents) {
                if (unDocument instanceof Book) {
                    author.append(unDocument.getAuthor());
                }
            }
            return author.toString();
        }
     
        /**
         * Vrai si le document est deja present.
         * @param doc doc
         * @return Vrai si le document est deja present.
         */
        public boolean isPresent(final Document doc) {
            final boolean trouve = false;
            final Iterator<Document> iterator = documents.iterator();
     
            while ((!trouve) && iterator.hasNext()) {
                if (iterator.next().getNumEnregistrement().equals(doc.getNumEnregistrement())) {
                    return true;
                }
            }
            return false;
        }
    }

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour votre réponse, mais je suis obligé d'utiliser les tableaux.

    Merci

Discussions similaires

  1. Aide Tableau croisé dynamique Excel
    Par azerty dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2006, 08h57
  2. aide tableau svp
    Par mator dans le forum C
    Réponses: 3
    Dernier message: 11/06/2006, 15h54
  3. Aide Tableau vbs
    Par Travailleuuse06 dans le forum ASP
    Réponses: 2
    Dernier message: 29/12/2005, 14h01
  4. Réponses: 2
    Dernier message: 21/12/2005, 17h33
  5. [Système][Class-Path]cherche aide sous java pour fedoracore ou linux
    Par mickey hollywood dans le forum Général Java
    Réponses: 4
    Dernier message: 29/03/2005, 01h13

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