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 :

[Débutant][ArrayList]parcours et recherche d'objets


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [Débutant][ArrayList]parcours et recherche d'objets
    Bonjour.
    Il me faut faire un programme en mode console(DOS).
    Ce programme gere des outils.
    Une des fonctions ajouterOutil() demande d'abord le coed de l'outil, si le code rentré existe déja dans la liste des outils, le programme doit redemander le code, et ce tantque le code ne sera pas valide.

    Voici une partie de programme qui vérifie le code de l'outil.
    Je peux parcourir la liste, de comparer le code de l'outil et d'afficher le message d'erreur, mais je n'arrive pas d'appeler la saisie de code d'outil de nouveau en cas d'erreur.
    SVP aidez moi!!
    C'est urgent!!!!

    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
            // saisie
            //codeInventaire = saisirCodeInventaire();
     
            unOutil = liste.premierElement();
            //
            //do{
                System.out.println("VERIFIER CODE");
                codeInventaire = saisirCodeInventaire();
     
                if(!liste.estVide()){
                    do{
     
                        if(unOutil.getCodeInventaire().equals(codeInventaire)){
                            System.out.println("ERREUR CODE INVENTAIRE!");
                            //finListe = true;
                            codeInventaire = saisirCodeInventaire();
                            codeInventaireExiste = true;
                        }
                        else
                            codeInventaireExiste = false;
     
                        if(!codeInventaireExiste){
                            if(unOutil == liste.dernierElement())
                                finListe = true;
                                else
                                    unOutil = liste.successeurDe(unOutil);
                        }
                    }while(!finListe || codeInventaireExiste == true);
                }
            //}while(codeInventaireExiste);

    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
        public T premierElement (){
            if(estVide())
                return null;
            else
                return liste.get(0);
        } // premierElement
     
        /**
         * Retourne la reference de l'objet en fin de liste
         * @return reference de l'objet ou null si liste vide
         */
        public T dernierElement (){
            if(estVide())
                return null;
            else
                return liste.get(liste.size()-1);
        } // dernierElement
     
        /**
         * Retourne la reference de l'élement de la liste qui suit 
         * celui spécifié en paramètre
         * @return la référence de l'objet suivant ou null si liste vide ou fin de la liste
         */
        public T successeurDe (T element){
            if( estVide() || liste.indexOf(element) >= nbElements() )
                return null;
            else
                return liste.get(liste.indexOf(element)+1);
        } // successeurDe

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Euh... si tu as le message d'erreur, tu as forcément la saisie du code, c'est la ligne suivante....


    Par contre je vois un soucis dans ton algo... si tu entres le code d'un outil existant, il va le détecter, et t'en demander un autre... mais il ne fera la vérification du nouveau code qu'à partir du drnier élément qui a été vérifié. Donc si tu rentres le code d'un élément précédent, il va te le sortir comme non existant ,alors qu'il sera existant.
    A chaque code entré, il faudrait vérifier depuis le début de ta liste.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui, c'est exactement ce qui se passe...
    Un autre problème que j'ai, réside dans la récupération de l'objet trouvéavec se meme code d'inventaire dans la liste(mais c'est pour plus tard - pour modifier l'objet dont on a fourni le code d'inventaire) .

    J'ai passé la journée à me battre avec ce truc, et je n'arrive à rien!

    SVP, donnez moi un exemple de l'algo qui marche, pour la premiere question pour commencer.

    Merci.

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Je tenterai quelque chose du style:

    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
     
    boolean flag;
     
    System.out.println("VERIFIER CODE"); 
     
    do {
        codeInventaire = saisirCodeInventaire(); 
     
        flag=false;
     
        for (int i=0;i<liste.size();i++) {
            if (liste.get(i).equals(codeInventaire)) {
                System.out.println("ERREUR CODE INVENTAIRE!");
                flag=true;
                break;
            }
        }
    } while (flag)
    (j'ai supposé que ta liste était une ArrayList... il y a peut-être un cast à faire si nécessaire...)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup!
    C'est presque réussi.
    Oui, c'est ArrayList qui est utilisé.

    Maintenant, ce qui ne fonctionne pas, c'est cela: if (liste.get(i).equals(codeInventaire))

    En fait, je ne peux pas utiliser les méthodes propres de ArrayList, mais se servire de la classe utilitaire, qui elle les utilise.

    Je sais pas comment don comparer des objets, car dans toutes les méthodes existantes je ne peux passer que des objets...

    Je vous donc affiche au complet la classe utilitaire, je vois pas quelle méthode qui s'y trouve pourra m'aider.

    Je compte donc sur votre aide.
    Merci encore!

    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
    public class ListeArray <T> implements ADTListe <T>{
     
        // liste des elements
        private ArrayList <T> liste;
     
        /**
         * Constructeur 
         * Creation de la liste
         */
        public ListeArray(){
            liste = new ArrayList <T>();
        } // constructeur
     
        // --- Methodes 
     
        /**
         * Verification si la liste contient ou non des élements
         * @return true si la liste est vide, sinon false
         */
        public boolean estVide (){
            return liste.size() == 0;
        } // estVide
     
        /**
         * Retirer tous les élements de la liste. La liste sera vide
         * 
         */
        public void viderListe (){
            liste.clear();
        } // viderListe
     
        /**
         * Retourne le nombre d'éléments de la liste
         * @return Nombre d'élements (int)
         */
        public int nbElements (){
            return liste.size();
        } // nbElements
     
        /**
         * Ajoute l'élément au début de la liste
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         */
        public T ajouterDebut (T element){
            liste.add(0, element);
            return null;//trouverElement(element);
        } // ajouterDebut
     
        /**
         * Ajoute l'élément à la fin de la liste
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         */
        public T ajouterFin (T element){
            return liste.set(nbElements()-1, element);
        } // ajouterFin
     
        /**
         * Ajoute l'élément en ordre croissant (avec compareTo)
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         * ====> pas à être implémentée pour le tp1
         **/
        public T ajouterOrdonne (T element){
            // A venir pour le TP2  
            return null;
        } // ajouterOrdonne
     
        /**
         * Retirer de la liste l'élément spécifié en paramètre
         * @return la référence de l'objet retiré, ou null si l'élément n'existe pas
         */
        public T retirer (T element){
            if(trouverElement(element) != null)
                return liste.remove(liste.indexOf(element));
            else
                return null;
        } // retirer
     
        /**
         * Vérifier si l'élement parametre existe dans la liste
         * @return la reference de l'objet trouvé dans la liste ou null si inexistant
         */
        public T trouverElement (T element){
            if(liste.contains(element)){
                System.out.println("LISTE CONTIENT ELEMENT!");
                return liste.get(liste.indexOf(element));
            }
            else
                return null;
        } // trouverElement
     
        /**
         * Retourne la reference de l'objet en début de liste
         * @return reference de l'objet ou null si liste vide
         */
        public T premierElement (){
            if(estVide())
                return null;
            else
                return liste.get(0);
        } // premierElement
     
        /**
         * Retourne la reference de l'objet en fin de liste
         * @return reference de l'objet ou null si liste vide
         */
        public T dernierElement (){
            if(estVide())
                return null;
            else
                return liste.get(liste.size()-1);
        } // dernierElement
     
        /**
         * Retourne la reference de l'élement de la liste qui suit 
         * celui spécifié en paramètre
         * @return la référence de l'objet suivant ou null si liste vide ou fin de la liste
         */
        public T successeurDe (T element){
            if( estVide() || liste.indexOf(element) >= nbElements() )
                return null;
            else
                return liste.get(liste.indexOf(element)+1);
        } // successeurDe
     
        /**
         * Retourne la reference de l'élement de la liste qui précède
         * celui spécifié en paramètre
         * @return la référence de l'objet precedent ou null si liste vide ou début de la liste
         */
        public T predecesseurDe (T element){
            if( estVide() || liste.indexOf(element) <= 0)
                return null;
            else
                return liste.get(liste.indexOf(element)-1);
        } // predecesseurDe
     
     
     
    }

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Raaah, du Java 5.0... je suis resté sur le 1.4...
    Bon, je vais quand même essayer...

    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
     
    boolean flag;
     
    System.out.println("VERIFIER CODE");
     
    do {
        codeInventaire = saisirCodeInventaire();
     
        flag=false;
        String element;
     
        for (int i=0;i<liste.size();i++) {
            if (i==0) {
                element=liste.premierElement();
            } else {
                element=liste.successeurDe(element);
            }
     
            if (element.equals(codeInventaire)) {
                System.out.println("ERREUR CODE INVENTAIRE!");
                flag=true;
                break;
            }
        }
    } while (flag)
    Ca devrait passer...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Le choix d'une ArrayList est il obligatoire, car là tu as une liste que tu dois parcourir a chaque fois pour trouver le bon element, ou non. Moi j'utiliserai une HashTable, car tu est typiquement dans le cas d'une clé/valeur.
    Dans ton cas la clé serait le code de l'outil et la valeur le produit en lui même.
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui, je suis obligé de passer par ArrayList, car c'est un TP universitaire.
    Le prof nous a donné une interface et il a dit ce qu'on a toutes les méthodes necessaires pour faire le travail....
    C'est sure qu'il est con ce mec, mais qu'est-ce que je pourrais faire?
    Donc je cous remercie encore une fois pour les réponses.
    Je vais tester la solution proposée.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci à tous de m'avoir repondu.
    Vous m'avez beaucoup aidé.
    Maintenant mon application fonctionne.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 17/01/2008, 17h02
  2. Réponses: 4
    Dernier message: 19/06/2007, 10h41
  3. [Recherche] Info objet COM
    Par kacedda dans le forum Visual C++
    Réponses: 4
    Dernier message: 29/08/2006, 14h25
  4. Recherche librairies objet access
    Par thb74 dans le forum Access
    Réponses: 1
    Dernier message: 10/08/2006, 20h49
  5. [C#][Remoting]scan de la mémoire d'un process en recherche d'objet
    Par hatake.kakashi dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2006, 10h35

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