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 :

tableau objet/ classe objet


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    systéme d'information
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : systéme d'information
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut tableau objet/ classe objet
    Bonjour,

    Lors d'ajout d'un objet ca marche correctement mais lorsque on l'affiche par exemple l'objet de tab[0] deviendra null et t[1] s'affiche aprés lorsque on ajoute un autreobjet t[0] et [1] deviendra null c'est quoi la solution ???
    j'espère que j'aurai une réponse voila la partie affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public static void afficher(Objet[]tab){
     
            for(int i=0;i<tab.length;i++){
                System.out.println(tab[i]);
                System.out.println("*****");
     
            }
        }
    et si j'ajoute tab[i].toString() ca sort une exception de nullpointer si j'ajout plus qu'un objet

    Merci d'avance de votre aide c'est urgent :/

  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,

    Un tableau est une liste d'emplacements. Java ne pouvant deviner ce que tu veux y mettre, ces emplacements sont vides à la création du tableau, sauf lorsque le type est primitif (comme int, double ou boolean...), ou il y a une valeur par défaut.

    Donc, c'est normal que tab[i] soit null, tant que tu n'y a pas mis d'instance. A toi de savoir ce que tu veux y mettre. Bien sûr, en conséquence, tant qu'il n'y a pas d'instance dans une case, on ne peut pas invoquer de méthode et tab[i].methodeQuelconque() causera une NullPointerException.

    Par contre, si tu remplis bien le tableau, et que malgré cela, il y a toujours des cases vides (null), c'est ton code de remplissage qui a un problème, et c'est celui-ci que tu devrais poster ici.
    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
    Futur Membre du Club
    Homme Profil pro
    systéme d'information
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : systéme d'information
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut question
    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
    public static Objet ajouter(Objet p1){
        String type;
        String couleur;
        double prix;
        int pointure;
     
        boolean neuf=true;
        System.out.println("donnez type ");
        type=Clavier.lireString();
     
        System.out.println("donnez couleur ");
        couleur=Clavier.lireString();
     
        System.out.println("donner pointure");
        pointure=Clavier.lireInt();    
        System.out.println("donner prix);
        prix=Clavier.lireDouble();
     
     
           p1 = new objet(Type,Couleur,pointure,prix,neuf);
      return p1;
     
       }
    }
    aprés au main j'ai fais p1=ajouter(p1); t[i]=p1;( i=n-1 car mon tableau est illimité lorsque j'ajoute un objet dans l'élément i il passe directement dc dés qu'il clique sur ajouter objet (option 1 de mon menu la longueur = longeur +1 ; aprés tab=new int [longeur]; et ici on fait la partie d'ajout )

  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
    Citation Envoyé par happyman2201 Voir le message
    aprés au main j'ai fais p1=ajouter(p1); t[0]=p1;( mon tableau est illimité lorsque j'ajoute un objet dans l'élément i il passe directement dc dés qu'il clique sur ajouter objet (option 1 de mon menu la longueur = longeur +1 ; aprés tab=new int [longeur]; et ici on fait la partie d'ajout )
    Si je comprends bien ton explication, il faut que tu saches que :

    • Un tableau est par définition de taille limitée en java ;
    • = est un signe d'affectation : t[0]=p1 met p1 dans la case (la cellule si tu préfères) d'indice 0 du tableau. Si on refait t[0]=quelquechose ensuite, quelquechose remplace ce qu'il y avait avant dans cette case : il n'y a aucun notion d'ajout.
    • Si tu fais :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      t[0]=p1;
      longueur++;
      t = new Object[longueur];
      Comme je crois comprendre, tu recréés un nouveau tableau (donc vide), donc ce que tu avais mis dans l'instance précédente de tableau référencée par t est toujours dans l'ancien tableau, mais pas dans le nouveau, forcément. Si aucune variable ne référence l'ancien tableau, c'est comme si celui-ci n'existait plus (pour faire simple, il est toujours quelque part en mémoire jusqu'à ce que le garbage recollector "décide" de l'en enlever, mais tu n'y plus accès, donc c'est comme s'il n'existait plus).



    NB : Peux-tu ajouter la ponctuation là où il faut, s'il te plait, et faire des mots complets français (dc ça veut dire quoi ?), afin de nous faciliter la lecture de tes questions et explications.
    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
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    en fait, ce que tu fais c'est créer une liste, pourquoi ne pas utiliser celles qui existe déjà ?
    • ArrayList
    • LinkedList
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    systéme d'information
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : systéme d'information
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    oui le problème si je ferai ce code
    le tableau est initialisé à la longueur 0 , donc lorsque le programme traite cette ligne on aura une exception car la longueur est 0

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Points : 78
    Points
    78
    Par défaut
    Non comme l'a déjà dis joel.drigo, t[0] = p1, se traduit par "on affecte p1 à l'objet référencé par le tableau t à l'indice 0". Ce n'est pas du tout une déclaration d'un tableau.

    Pourrais-tu nous montrer comment tu déclares ce tableau d'ailleur ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    systéme d'information
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : systéme d'information
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Tableau objet
    méthode ajout
    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
    public static void ajouter(Objet[]tab,int indice){
        String type;
        String couleur;
        double prix;
        int pointure;
        boolean neuf=true;
        PaireDeChaussures p1=null;
        System.out.println("type==>");
        type=Clavier.lireString();
     
        System.out.println("couleur ==>");
        couleur=Clavier.lireString();
     
        System.out.println("Pointure==>");
        pointure=Clavier.lireInt();    
        System.out.println("Prix==>);
        prix=Clavier.lireDouble();
     
        o1=new Objet(type,couleur,pointure,prix,neuf);     
        tab[indice]=o1;
     
    }
    dans la partie main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     case 1 :
                    ajouter(tab,i);
                    i++;
                    n=n+1;
                    tab=new Objet[n];            
                     break;
    la déclaration de mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int n=1;
    Objet []tab= new Objet[n];

  9. #9
    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
    C'est bien ce que je disais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ajouter(tab,i);
                    i++;
                    n=n+1;
                    tab=new Objet[n];            
                     break;
    tab = new Object[n] créé un nouveau tableau et, donc, tout ce qu'il y avait dans le tableau remplacé par ce nouveau tableau est "ailleurs", voire nullepart.

    Maintenant, au vu de ce code, je rejoins l'avis de @Alkhan : utilises une ArrayList, qui te permettra d'ajouter. Et tu n'auras même pas à maintenir, ni indice (variable i), ni taille (variable n), car l'ArrayList le fera pour toi, et se chargera de gérer l'agrandissement du tableau au besoin. Ensuite, si tu as vraiment besoin à un moment donné d'un tableau java d'Object, la méthode ArrayList.toArray() te permettra de l'obtenir.

    PS: par contre, si l'objet de ton code est un exercice de manipulation de tableau, pour résoudre le problème, il te faudra créer effectivement un nouveau tableau, mais dans une variable autre que tab, pour pouvoir copier le tableau référencé par tab dans ce nouveau tableau (par exemple par System.arrayCopy()), puis ensuite remplacé l'instance référencé par tab par celle référencé par la variable intermédiaire. Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n=n+1;
    Object[] temptab = new Object[n];
    System.arraycopy(tab, 0, temptab, 0, n-1);
    tab=temptab;
    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.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    systéme d'information
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : systéme d'information
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    ArrayList
    le problème de cet exercice j'ai pas le droit d'utiliser arrayList ( si j'ai le droit ça sera facile à manipuler mes tableaux d'objet :p ) :s

  11. #11
    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
    Donc, voir la solution que j'ai mis en PS.

    Accessoirement, on peut la simplifier en utilisant copyOf de la classe Arrays :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab = Arrays.copyOf(tab, tab.length+1);
    pour agrandir le tableau d'une case...
    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.

Discussions similaires

  1. Tableau mélangé entre objets et objets hérités
    Par Christophe Genolini dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/07/2013, 15h40
  2. Classe objet avec tableau
    Par artemis93 dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 05/04/2011, 13h37
  3. Tableau de classe ou d'objet
    Par rtg57 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 26/10/2010, 18h41
  4. Réponses: 3
    Dernier message: 19/05/2005, 10h46
  5. Objets/Classes avec un SGBD
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 09/11/2003, 16h04

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