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 objets dans un for


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Points : 122
    Points
    122
    Par défaut Création objets dans un for
    Bonjour à tous,
    J'ai un fichier texte qui contient ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    choufleur;Chou-fleurextra;3.50;tva3
    roman;Les malheurs de Sophie;16.50;tva3
    camembert;Cremeux 100% MG;5.80;tva3
    cdrom;C++ en trois jours;48.50;tva1
    boisson;Petit-lait;2.50;tva3
    petitspois;Pois surgelés;4.35;tva3
    poisson;Sardines;6.50;tva3
    biscuits;Cookies de grand-mere;3.20;tva3
    poires;Poires Williams;4.80;tva3
    cafe;100% Arabica;6.90;tva1
    pain;Pain d'epautre;6.90;tva3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LireEcrireFichier lire = new LireEcrireFichier();
    List<String> articlelignes = lire.lireFichier("basearticles.txt");//j'appelle, dans la class LireEcrireFichier(), la methode LireFichier();
     
                    for(int i = 0 ; i < articlelignes.size(); i++){
                        System.out.println("Taper "+ (i+1) +" pour changer le produit " + articlelignes.get(i));
                        String[] monarticle = articlelignes.get(i).split(";");
                        System.out.println(monarticle[0]);
                        Double monprix=Double.valueOf(monarticle[2]);
                        Article monarticle[0] = new Article(monarticle[1],monprix, monarticle[3]);
                    }
    J'aimerai créer mes articles dans la boucle for, mais je ne sais pas écrire le monarticle[0] qui contient le nom de l'objet. (choufleur par exemple)
    J'ai essayé plein de sorte d'écriture trouvé sur internet mais je n'y arrive pas


    Merci de votre aide

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Déjà, tu ne peux pas écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article monarticle[0] = new Article(monarticle[1],monprix, monarticle[3]);
    Parce que monarticle est un tableau de String, déclaré ici : String[] monarticle = articlelignes.get(i).split(";");. Bien sûr, un tableau de String ne peut pas contenir d'instances de Article. Il te faut simplement une structure compatible.

    Comme tu connais le nombre d'articles (c'est le nombre de lignes du fichier), tu peux simplement utiliser un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Article[] articles = new Article[articlelignes.size()];
     
    for(int i = 0 ; i < articlelignes.size(); i++){
        System.out.println("Taper "+ (i+1) +" pour changer le produit " + articlelignes.get(i));
        String[] monarticle = articlelignes.get(i).split(";");
        System.out.println(monarticle[0]);
        Double monprix=Double.valueOf(monarticle[2]);
     
        articles[i] = new Article(monarticle[1],monprix, monarticle[3]);
    }
    Ensuite, il faut bien sûr adapter la façon de paramétrer la construction d'Article par rapport aux données de la ligne lue et découpée par le split(";") et les paramètre du constructeur, afin de passer les bonnes informations dans le bon ordre, en convertissant éventuellement dans le bon type comme tu fais pour le prix;

    Donc à priori :
    1. un type
    2. un nom
    3. un prix
    4. un code de tva

    Donc, si tu as bien une classe Article comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Article {
        /* les attributs */
     
        /** constructeur **/
        public Article(String type, String nom, double prix, String code) {
              /* code d'initialisation des attributs avec les paramètres */
        }
     
    }
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        articles[i] = new Article(monarticle[0], monarticle[1],monprix, monarticle[3]);
    Tu peux bien sûr utiliser une liste aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List<Article> articles = new ArrayList<>();
     
    for(int i = 0 ; i < articlelignes.size(); i++){
        System.out.println("Taper "+ (i+1) +" pour changer le produit " + articlelignes.get(i));
        String[] monarticle = articlelignes.get(i).split(";");
        System.out.println(monarticle[0]);
        Double monprix=Double.valueOf(monarticle[2]);
     
        articles.add( new Article(monarticle[0],monarticle[1],monprix, monarticle[3]));
    }
    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 régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Points : 122
    Points
    122
    Par défaut
    Merci de ta réponse.
    Je pense que je me suis mal expliqué, ou alors je ne comprends pas bien ta réponse.

    Il me semble que ta réponse me donne des articles créés qui ressemblent à cela :

    Article1 = new Article(choufleur, Chou-fleurextra,3.50, tva3);
    Article2 = new Article (roman,Les malheurs de Sophie,16.50,tva3);

    Ok, mais ce n'est pas ce que je veux, moi j'aurais aimé avoir :

    choufleur = new Article(choufleur, Chou-fleurextra,3.50, tva3);
    roman = new Article (roman, Les malheurs de Sophie,16.50,tva3);

    Ce que tu dis ici, je l'ai bien compris :
    monarticle est un tableau de String, déclaré ici : String[] monarticle = articlelignes.get(i).split(";");

    Comme dans ma liste de string, choufleur est une chaine de caractère, donc pourquoi ne pas pouvoir écrire monarticle[0] qui contient choufleur.

    Il y a un truc que je n'ai pas bien compris dans la déclaration de mes objets…..

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ok, je comprends mieux. Mais en Java on ne peut pas créer des variables à la volée au runtime. Et quand on écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choufleur =  quelque chose, peu importe ce que c'est
    choufleur est forcément une variable.

    Ce que tu peux faire c'est une Map, qui associe des clefs et des valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Map<String,Article> articles = new HashMap<>();
     
    for(int i = 0 ; i < articlelignes.size(); i++){
        System.out.println("Taper "+ (i+1) +" pour changer le produit " + articlelignes.get(i));
        String[] monarticle = articlelignes.get(i).split(";");
        System.out.println(monarticle[0]);
        Double monprix=Double.valueOf(monarticle[2]);
     
        articles.put( monarticle[0], new Article(monarticle[0],monarticle[1],monprix, monarticle[3]));
    }

    Ensuite, tu peux accéder à l'instance de Article par son type (enfin la donnée de la première colonne, peu importe le nom que tu lui donnes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article choufleur = articles.get("choufleur");
    Tu peux y accéder via une variable qui contient le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String articletype = ... ça vient de quelque par (saisi au clavier, lu dans un fichier, peu importe)
    Article article = articles.get( articletype );
    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.

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

Discussions similaires

  1. Création objet dans boucle While
    Par phoenixgreg dans le forum Débuter
    Réponses: 10
    Dernier message: 22/12/2015, 16h11
  2. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34
  3. [BO 5.1.6 i] Création d'objet dans l'univers
    Par julien2602 dans le forum Designer
    Réponses: 20
    Dernier message: 08/01/2008, 14h15
  4. [1.x] Création de plusieurs objets dans mon action.class.php
    Par lijko dans le forum Symfony
    Réponses: 2
    Dernier message: 30/12/2007, 13h37
  5. création d'un objet dans un Tobjectlist
    Par niarkyzator dans le forum Delphi
    Réponses: 2
    Dernier message: 07/01/2007, 20h47

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