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 :

Utilisation d'un tableau d'une autre classe


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut Utilisation d'un tableau d'une autre classe
    Salut,
    J'ai rencontrer un problème lors de l'utilisation d'un tableau d'une class1 dans une autre class2.Dans la class1, j’incrémente la taille d'un vecteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public double[] nbActu={0.0};
    /////////////////////////
    Person p = new Person(this,0);
    VecPerson.add(p);
    nbActu[j] = VecPerson.size();//stocker la taille dans un tab
    afficherNombre(nbActu);  //affichage de res
    j++;
    J'ai utiliser la fonction afficherNombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	 public void afficherNombre(double[] nbActu2){
    for(int i=0; i<nbActu2.length;i++){
    System.out.println("la taille dans la class1 cas "+i+" est "+nbActu2[i]);
    }
    }
    rien que pour vérifier que l'ajout se passe bien.
    a la fin j'ai ajouté un Getters:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public double[] getN()
    {
    return nbActu;
    }
    Maintenant dans la classe2, j'ai instancier l'objet de la class1, puis j'ai récupérer la taille du tableau en utilisant le getters, comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public.....
    pe= new PorteEntrer();//   PorteEntre est le nom de la class2
     System.out.println("la taille dans la class2  est "+pe.getN().length);
    voici la résultat:
    la taille dans la class1 est 2.0
    la taille dans la class1 est 3.0
    la taille dans la class1 est 4.0
    la taille dans la class1 est 5.0

    la taille dans la class2 est 1 ????

    Dans la class1 j'affiche les taille correctement, mais dans la class2, elle m'affiche toujours un '1'. PK?
    merci d'avance.

  2. #2
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Salut, on peut voir le code du constructeur PorteEntrer() ?
    Sinon ce serait sympa d'indenter le code, merci.

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Évites les doubles post

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Évites les doubles post
    Le 1er post est un erreur, je n'ai pas trouver une moyenne pour le supprimer.
    oui, j'ai ajouté un double, mais la résultat reste la même.

    Salut, on peut voir le code du constructeur PorteEntrer() ?
    Sinon ce serait sympa d'indenter le code, merci.
    voici le constructeur:
    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
     
    public PorteEntrer(int ind, int xx, int yy, Simulation s, Color c, int nbPerson, double tab)
    		{
    	  sim = s;
    	  couleur = c;
    	  angle = tab;
    	  Indice = ind;
    	  X = xx;
    	  Y = yy;
    	  nombrePerson=nbPerson;
    	  StockNourriture = 0;
    	  maxPerson = 400;
    	  compteur = 0;
     
    VecPerson = new Vector();
    for (int i=0;i<nbPerson;i++)  VecPerson.add(new Person(this, 0));
     
    		}
    public PorteEntrer(){
     
    }

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par karamovic Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    public double[] nbActu={0.0};
    et donc sa taille est de 1 ? et comme je pense que ton code sait compter, c'est que tu dois faire un miss entre l'appel de ton afficherNombre() et celui de ton pe.getN.length ?

    Je ne vois pas d'appel à afficherNombre dans ton code? il est donc dans l'autre classe? à quel endroit? C'est toujours dur quand y'a des tout ptit bouts de codes comme ça pour y voir clair ...

    Comme ça à regarder, je dirais que tu crée un objet UNO, que tu le nourri et que tu lui fais afficher les valeurs et qu'ensuite dans ta deuxième classe, tu crée un objet DEUXIO que tu ne nourri pas et à qui te demande la taille de nbactu, qui est de 1, donc

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par CrikTeCroque Voir le message
    et donc sa taille est de 1 ? et comme je pense que ton code sait compter, c'est que tu dois faire un miss entre l'appel de ton afficherNombre() et celui de ton pe.getN.length ?

    Je ne vois pas d'appel à afficherNombre dans ton code? il est donc dans l'autre classe? à quel endroit? C'est toujours dur quand y'a des tout ptit bouts de codes comme ça pour y voir clair ...
    j'ai utilisé la fonction afficherNombre(), seulement pour faire la comparaison entre les deux classes et pour vérifier que l'ajout se passe bien dans la 1er.
    l'appelle c'est directement après l'ajout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    VecPerson.add(p);
    nbActu[j] = VecPerson.size();
    afficherNombre(nbActu);/////////////////////ICI///////////////////
     j++;

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 105
    Points
    105
    Par défaut
    je me suis mal exprimée

    c'est de ça dont je parle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    VecPerson.add(p);
    nbActu[j] = VecPerson.size();
    afficherNombre(nbActu);/////////////////////ICI///////////////////
     j++;
    et pas juste afficherNombre()...

    Et ce que je veux dire c'est qu'il semble qu'en fait tu ai deux objets et non un seul .. l'un qui est plein et donc affiche les valeurs, l'autre qui ne l'est pas...

    Mais ça reste juste une hypothèse : je ne suis pas dans ton programme et en l'état c'est difficile (pour moi en tout cas) de bien se rendre compte

  8. #8
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Je propose que tu nous présentes clairement tes classes (membres, constructeurs, ...) et tes différents appels de fonctions, parceque j'ai du mal à suivre.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par LinuxUser Voir le message
    Je propose que tu nous présentes clairement tes classes (membres, constructeurs, ...) et tes différents appels de fonctions, parceque j'ai du mal à suivre.
    Oui, j'ai mal présenter le code:
    Class1:
    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
     
    public class PorteEntrer
    {
    public double[] nbActu={0.0};//table ou je vais stocker la taille de vecteur //apré chaque ajout
    public PorteEntrer(int ind, int xx, int yy, Simulation s, Color c, int nbPerson, double tab)
    		{
    	  sim = s;
    	  couleur = c;
    	  angle = tab;
    			Indice = ind;
    			X = xx;
    			Y = yy;
    	  nombrePerson=nbPerson;
    	  StockNourriture = 0;
    	  maxPerson = 400;
    	  compteur = 0;
     
    	  VecPerson = new Vector();
    	  for (int i=0;i<nbPerson;i++)  VecPerson.add(new Person(this, 0));
    }
     
    public PorteEntrer(){	
    		}
    public void faitTour()
    		{
    .....//qlq test ici
     if (VecPerson.size()<maxPerson) ajoutePerson();
    }
     
    public void ajoutePerson()
    		{
    int j=0;
    Person p = new Person(this,0);
    VecPerson.add(p);
    nbActu[j] = VecPerson.size();//je veux stocker la taille de vector dans un tableau de type double()
    afficherNombre(nbActu);//pour verifier que l'ajoute de passe bien
    j++;
    		}
    public void afficherNombre(double[] nbActu2){
    for(int i=0; i<nbActu2.length;i++){
     System.out.println("la taille dans la class1 est "+nbActu2[i]);
    		 }
    //résultat : la taille dans la classe1 est 1 apré 2....C bien
    }
    public double[] getN(){
    return nbActu;//j'ai utilisé ce getters pour que je récupère la val de tab nbActu dans l'autre class.
     }
    Classe2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Simulation
    {
    .....
     
    public Void getCourbe(){
    pe= new PorteEntrer();
    System.out.println("la taille dans la class2  est "+(double)pe.getN().length);
    //je voulais ici, verifier que je récupère la taille exacte du table nbActu de l'autre classe 
    	}
    Merci toujours pour vos réponse.

  10. #10
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    OK donc tout est normal.

    Tu appelles

    qui est un constructeur vide qui "ne fait rien", donc dans ton tableau nbActu il n y a qu un seul élément.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public double[] nbActu={0.0};

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    Merci LinuxUser,
    J'ai un problème avec les notions de base en java .

    Un autre problème, j'ai utiliser une méthode pour stocker la taille d'un vector dans un tableau de type double.
    a chaque fois que j'appelle la méthode ajoutPerson, je dois stocker la taille de VectorPerson dans un tableau:
    par exemple, je veux que la résultat sera comme suite:
    element[1]= 4 (4 taille de vector)
    apré un autre appelle(un autre ajout):
    element[2]= 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void ajoutePerson()
    	{
    int i = 0;
    int k=5;
    Person p = new Person(this,0);
    VecPerson.add(p);
    nb[i]=VecPerson.size();
    i++;
    		}
    est ce que le i++ va incrémenter la table, ou bien il va toujours écraser la 1er case??

  12. #12
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Citation Envoyé par karamovic Voir le message
    Merci LinuxUser,
    J'ai un problème avec les notions de base en java .

    Un autre problème, j'ai utiliser une méthode pour stocker la taille d'un vector dans un tableau de type double.
    a chaque fois que j'appelle la méthode ajoutPerson, je dois stocker la taille de VectorPerson dans un tableau:
    par exemple, je veux que la résultat sera comme suite:
    element[1]= 4 (4 taille de vector)
    apré un autre appelle(un autre ajout):
    element[2]= 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void ajoutePerson()
    	{
    int i = 0;
    int k=5;
    Person p = new Person(this,0);
    VecPerson.add(p);
    nb[i]=VecPerson.size();
    i++;
    		}
    est ce que le i++ va incrémenter la table, ou bien il va toujours écraser la 1er case??
    Dans ton exemple, ton incrémentation ne sert à rien car à chaque appel de ajoutePerson() la variable i vaudra 0 puis 1 avant de quitter la fonction.

    Ce qu'il faurait c'est que i soit une variable globale ou passée en argument et incrémentée en dehors de la fonction.

    Autre remarque, pourquoi tous tes objets Person sont créés avec les même arguments ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Person p = new Person(this,0);
    Et à quoi sert la variable k ?
    Avant de coder en détails, je pense que tu devrais poser clairement ce que tu cherches à faire puis coder petit à petit.

  13. #13
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 105
    Points
    105
    Par défaut
    Tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void ajoutePerson()
    	{
    int i = nb.length();
    int k=5;
    Person p = new Person(this,0);
    VecPerson.add(p);
    nb[i]=VecPerson.size();
    
    		}

  14. #14
    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 CrikTeCroque Voir le message
    Tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void ajoutePerson()
    	{
    int i = nb.length();
    int k=5;
    Person p = new Person(this,0);
    VecPerson.add(p);
    nb[i]=VecPerson.size();
    
    		}
    Salut,

    C'est un tableau, donc on obtient sa taille par nb.length (pas de parenthèse)

    et ça causerait une ArrayIndexOutOfBoundsException, parce qu’un tableau ne s’agrandit pas tout seul.


    Pourquoi utiliser un tableau ? Une ArrayList te permettrait de réaliser plus simplement ce que tu cherches à faire...

    Si tu tiens absolument à utiliser un tableau, il va falloir agrandir toi même ton tableau à chaque fois (ce que fait l'ArrayList à ta place) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void ajoutePerson()
    	{
        int k=5;
        Person p = new Person(this,0);
        VecPerson.add(p);
        int i=nb.length;
        double[] newnb=new double[i+1];
        System.arraycopy(nb, 0, newnb, 0, i);
        nb=newnb;
        nb[i]=VecPerson.size();
    }
    tu devrais par ailleurs déclarer ta variable (nbactu et pas nb dans tes autres post) private, sinon comme le tableau change à chaque à ajout de person, les autres classes qui pourraient accèder à ce tableau risque de boguer !
    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.

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    Merci bien LinuxUser, CrikTeCroque , joel.drigo.
    J'ai appris beaucoup de choses a cause de vos réponse.
    Citation Envoyé par LinuxUser Voir le message
    Et à quoi sert la variable k ?
    J'ai supprimé un petit bout de code qui ne sert a rien dans mon problème et utilise K.

    Citation Envoyé par joel.drigo Voir le message
    Salut,
    Pourquoi utiliser un tableau ? Une ArrayList te permettrait de réaliser plus simplement ce que tu cherches à faire...

    Si tu tiens absolument à utiliser un tableau, il va falloir agrandir toi même ton tableau à chaque fois (ce que fait l'ArrayList à ta place) :
    Par la suite je souhaite tracer une courbe en utilisant l'API jMathPlot. Dans ce cas on doit passer deux tableaux de type double(x , y):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	plot.addLinePlot("mon Courbe", double[] x, double[] y);
    Je pense pas qu'il accepte des arrayListe.??

    merci encore une fois.
    sujet résolu.

  16. #16
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 105
    Points
    105
    Par défaut
    han joel, c'est vrai ça tu as raison et honte à moi..

    @Karamovic, si c'est pour un appel de fonction, tu peux préparer un tableau que tu alimentes avec ton array juste avant l'appel.. un peu fastidieux mais ,c'est une solution valable je penses... (encore que là tout de suite j'ose plus trop penser, faut que j'aille noyer ma honte dans un chocolat chaud )

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/06/2014, 13h26
  2. Utilisation d'un tableau d'une autre classe
    Par karamovic dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2013, 11h15
  3. Appeler un tableau dans une autre classe
    Par jasinski13 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/05/2011, 14h43
  4. [PHP 5.3] [POO]Utilisation de methodes venant d'une autre classe
    Par yann18 dans le forum Langage
    Réponses: 5
    Dernier message: 25/03/2011, 17h16
  5. recuperation tableau d'une autre classe
    Par invictus25 dans le forum C#
    Réponses: 6
    Dernier message: 15/03/2011, 16h00

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