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 :

Problème de stockage des objets:Vector


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut Problème de stockage des objets:Vector
    Bonjour,
    j'ai un problemme de mise a jour a chaque iteration:
    mon programme permet de parcourir un vecteur des documents(chaque document est un composant du vectuer): j'appelle ce vecteur vecteur classes dans mon programme.
    je fais une classification hierarchique entre ces document. chaque document au depart est une classeune classe est definie par un ensemble de documents: 1 ou plusieurs documents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     class Classe
    {
         Vector  points;   
         public Classe() 
            {}
        public Classe(String ch) 
            {
     
                points=new Vector();
                points.addElement(ch);
             }    
    }
    Principe de classification :
    - a chaque iteration je regroupe les deux classes qui ont la distance maximale :imax et jmax les deux classes a regrouper.
    - ensuite je copie le vecteur points de la classes jmax dans le vecteur points de la classe imax
    - et je supprime la classe jmax.
    ce principe et retirer jusqu'a que toutes les classses sont reuni dans une seule classe;

    jusqu'a ici le programme fonctionne correctement: Voici le 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
     Vector Regroupement=new Vector();//permet d'enregistrer tous les regropement
    public Vector Test(Vector classes,float [][]matriceDisDoc, Vector globale)
        {
     
         Vector  regroupement=new Vector();
                int i=0;
                int j=0;
                int imax=-1;// pour la suppresion de elements regrouper dans le vecteur
                int jmax=-1;// pour la suppresion de elements regrouper dans le vecteur
                float dismax=0; 
                float []tabdis=new float[4];
                float Inertie_Intra=0;
                float Inertie_Inter=0;
                float InertieTotale=0;
                // boolean trouve=false;  
                matricedistanceclasse=new float[classes.size()][classes.size()];            
                for(i=0;i<classes.size()-1;i++)
                {        
                 for(j=i+1;j<classes.size();j++)
                  {
                      Classe e1=new Classe();
                      e1=(Classe)classes.elementAt(i);
                      Classe e2=new Classe();
                      e2=(Classe)classes.elementAt(j);                    
                      tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
                      float d=tabdis[0];
                      matricedistanceclasse[i][j]=d;//distance entre deux classe
                      // calcul de l'inerite
                      if(d>dismax)
                      {
                       dismax=d;
                       imax=i;
                       jmax=j;                  }           
                    }
                }
     
                System.out.println(); 
                if(jmax!=-1)
                {
     
                 Classe dc=new Classe();
                 dc=(Classe)(classes.elementAt(jmax));
    //regrouper jmax a imax et supprimmer jmax
                 for(int h1=0;h1<dc.points.size();h1++)
     
                 ((Classe)(classes.elementAt(imax))).points.add(((Classe)       (classes.elementAt(jmax))).points.elementAt(h1));             classes.remove(jmax);                                       
     
     
              Regroupement.add(classes)//Pb: dans le vecteur Regroupement je trouve toujous la mise ajour de classes         }     
     
                  if(classes.size()>1)
                 Test(classes,matriceDisDoc,globale);
            return classes;
        }
    MOn problemme c'est tous les composantes du vecteur regroupement ont les memes: Le truc c'est que la modofication sefait sur la le vecteur classes et classes toujours prend la derniere modification: Est ce qu'il une solution.
    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    j arrive pas a lire ton code, tu peux ajouter les balise [ code ] [ /code ] stp.
    une petite remarque entre temps pourquoi tu cree a chaque fois une nouvelle Classe avant de l aprendre de ton tableau? t as pas besoin de faire ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Classe e1=new Classe();
    e1=(Classe)classes.elementAt(i);
    Classe e2=new Classe();
    e2=(Classe)classes.elementAt(j);
    plustot ca directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Classe e1=(Classe)classes.elementAt(i);
    Classe e2=(Classe)classes.elementAt(j);
    ajoute les balise et on pourra y voir un peu plus clair.

    Cheers,

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut Problemme
    Bonjour,
    Merci pour tes remarques. j'espere que tu as localise exacetement le truc dans mon programme. voici le code entre les balises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Classe
    {
    Vector points; 
    public Classe() 
    {}
    public Classe(String ch) 
    {
     
    points=new Vector();
    points.addElement(ch);
    } 
    }
    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
     
    .......
    Vector Regroupement=new Vector();//permet d'enregistrer tous les regropement
    public Vector Test(Vector classes,float [][]matriceDisDoc, Vector globale)
    {
     
    Vector regroupement=new Vector();
    int i=0;
    int j=0;
    int imax=-1;// pour la suppresion de elements regrouper dans le vecteur
    int jmax=-1;// pour la suppresion de elements regrouper dans le vecteur
    float dismax=0; 
    float []tabdis=new float[4];
    float Inertie_Intra=0;
    float Inertie_Inter=0;
    float InertieTotale=0;
    // boolean trouve=false; 
    matricedistanceclasse=new float[classes.size()][classes.size()]; 
    for(i=0;i<classes.size()-1;i++)
    { 
    for(j=i+1;j<classes.size();j++)
    {
    Classe e1=new Classe();
    e1=(Classe)classes.elementAt(i);
    Classe e2=new Classe();
    e2=(Classe)classes.elementAt(j); 
    tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
    float d=tabdis[0];
    matricedistanceclasse[i][j]=d;//distance entre deux classe
    // calcul de l'inerite
    if(d>dismax)
    {
    dismax=d;
    imax=i;
    jmax=j; } 
    }
    }
     
    System.out.println(); 
    if(jmax!=-1)
    {
     
    Classe dc=new Classe();
    dc=(Classe)(classes.elementAt(jmax));
    //regrouper jmax a imax et supprimmer jmax
    for(int h1=0;h1<dc.points.size();h1++)
     
    ((Classe)(classes.elementAt(imax))).points.add(((Classe) (classes.elementAt(jmax))).points.elementAt(h1)); classes.remove(jmax); 
     
     
    Regroupement.add(classes)//Pb: dans le vecteur Regroupement je trouve toujous la mise ajour de classes } 
     
    if(classes.size()>1)
    Test(classes,matriceDisDoc,globale);
    return classes;
    }
    Mon but : a chaque regroupement je stocke l'esensemble des classes forunies dan sun vecteur que j'ai appeller Regroupement. mais le ce prog me sotcke les classes forunies avec la derniere mise a jour.
    merci pour ton aide

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    flemme de lire : si tu pouvais indenter ton code et par la même occasion appliquer les conseils qui t'on été donnés au dessus, ça aiderait.
    Bon courage.

  5. #5
    Membre éprouvé Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Par défaut
    Salut,

    1er truc, laisse tomber les Vector et utilise plutôt les ArrayList.
    2nd truc, si j'ai compris ton raisonnement tu veux faire une méthode récursive??
    Si c'est bien ça, alors tu as un problème par là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(classes.size()>1)
    Test(classes,matriceDisDoc,globale);
    return classes;
    Après je n'ai pas du tout compris ce que tu voulais faire mais tu peux commencer par mettre des lignes de debug pour comprendre ce que ton prog fait.

    Bon courage

  6. #6
    Membre éprouvé Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Par défaut
    Salut,
    Ce que je voulais dire par
    Citation Envoyé par manube Voir le message
    Salut,
    Si c'est bien ça, alors tu as un problème par là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(classes.size()>1)
    Test(classes,matriceDisDoc,globale);
    return classes;
    C'est que considérant une fonction récursive, je m'attend plutôt à voir qque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(classes.size()>1)
     return Test(classes,matriceDisDoc,globale);
    //else
     return classes;
    Sinon la valeur retournée est celle du premier appel uniquement...

  7. #7
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut Voici le problemme
    bonjour,
    ma fonction est recursive sur le vecteur classes:
    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
     
    public Vector Test(Vector classes,float [][]matriceDisDoc, Vector globale)
    {
     
    Vector regroupement=new Vector();
    int i=0;
    int j=0;
    int imax=-1;// pour la suppresion de elements regrouper dans le vecteur
    int jmax=-1;// pour la suppresion de elements regrouper dans le vecteur
    float dismax=0; 
    float []tabdis=new float[4];
    float Inertie_Intra=0;
    float Inertie_Inter=0;
    float InertieTotale=0;
    // boolean trouve=false; 
    matricedistanceclasse=new float[classes.size()][classes.size()]; 
    for(i=0;i<classes.size()-1;i++)
    { 
    for(j=i+1;j<classes.size();j++)
    {
    Classe e1=new Classe();
    e1=(Classe)classes.elementAt(i);
    Classe e2=new Classe();
    e2=(Classe)classes.elementAt(j); 
    tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
    float d=tabdis[0];
    matricedistanceclasse[i][j]=d;//distance entre deux classe
    // calcul de l'inerite
    if(d>dismax)
    {
    dismax=d;
    imax=i;
    jmax=j; } 
    }
    }
     
    // dans cette zonne je fait l'ajout des elements de la classe dans la position jmax dans la classes de imax
    //et je supprime le jmax
    // je travaille sur le meme vecteur des classes.
     //Voir le code A
    // je sotocke le vecteur classes dans un vecteurs globale Regroupement
    //mais une fois la mise a jour est faite sur le vecteur classes ses enregistrements dans le vecteur globale change: ma question est ce que je peut trouver une solution 
    Regroupement.add(classes)//Pb est ici} 
     
    if(classes.size()>1)
    Test(classes,matriceDisDoc,globale);
    return classes;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      Code A
    Classe dc=new Classe();
    dc=(Classe)(classes.elementAt(jmax));
    //regrouper jmax a imax et supprimmer jmax
    for(int h1=0;h1<dc.points.size();h1++) 
    ((Classe)(classes.elementAt(imax))).points.add(((Classe) (classes.elementAt(jmax))).points.elementAt(h1)); 
    classes.remove(jmax);

  8. #8
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut Explication de mon problemme
    salut,
    Mon programme permet de faire une classification hierarchique d'un ensemble de documents.
    -ces documents sont stockes dans un vecteur de je nomme classes
    -au debut de mon programme je considere un documents comme une classes.
    Voici le 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
    class Classe
    {
    Vector points; 
    public Classe() 
    {}
    public Classe(String ch) 
    {
     
    points=new Vector();
    points.addElement(ch);
    } 
    }
    
    - le processus tourne en regroupement les deux classes qui ont une distance maximale.
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011121314151617181920
     
    for(i=0;i<classes.size()-1;i++)
    { 
    for(j=i+1;j<classes.size();j++)
    {
    Classe e1=new Classe();
    e1=(Classe)classes.elementAt(i);
    Classe e2=new Classe();
    e2=(Classe)classes.elementAt(j); 
    tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
    float d=tabdis[0];
    matricedistanceclasse[i][j]=d;//distance entre deux classe
    // calcul de l'inerite
    if(d>dismax)
    {
    dismax=d;
    imax=i;
    jmax=j; } 
    }
    }
    - le processus s'arrete lorsque tous les documents sont regrouper dans la meme classe: voici le code qui nous permet de determiner les deux classes a regrouper imax et jmax. for(i=0;i<classes.size()-1;i++) { for(j=i+1;j<classes.size();j++) { Classe e1=new Classe(); e1=(Classe)classes.elementAt(i); Classe e2=new Classe(); e2=(Classe)classes.elementAt(j); tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale); float d=tabdis[0]; matricedistanceclasse[i][j]=d;//distance entre deux classe // calcul de l'inerite if(d>dismax) { dismax=d; imax=i; jmax=j; } } } le code qui permet de copier les elements de la classes jmax dans la classe imax et suppression de jmax.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Classe dc=new Classe();
    dc=(Classe)(classes.elementAt(jmax));
    //regrouper jmax a imax et supprimmer jmax
    for(int h1=0;h1<dc.points.size();h1++) 
    ((Classe)(classes.elementAt(imax))).points.add(((Classe) (classes.elementAt(jmax))).points.elementAt(h1)); 
    classes.remove(jmax);
    - mon but c'est de stocker a chaque iteration le regroupement faite par le programme et a la fin de programme je doit avoir tous les regroupement : mais c'est ici que je trouve le problemme le meme regroupement a la fin

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/03/2008, 13h00
  2. Réponses: 1
    Dernier message: 10/02/2008, 12h05
  3. Problème de stockage des caractères arabe dans Mysql?
    Par merci_tous dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/04/2007, 12h21
  4. Stockage des objets dans une BD(InstantObject)
    Par Klemsy78 dans le forum Delphi
    Réponses: 3
    Dernier message: 29/03/2007, 20h56
  5. Réponses: 4
    Dernier message: 21/02/2007, 17h08

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