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

Android Discussion :

Problème de gestion des Vector


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Problème de gestion des Vector
    Bonjour à toutes et à tous,

    Je dois avoir un problème d'initialisation des Vector que je ne sais pas faire.

    J'ai les classes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class TZoom {
        int Zoom;
        Vector<TLatLon> LatLon = new Vector<TLatLon>();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class TLatLon {
        int Lon;
        Vector<TLatitude> Lat = new Vector<TLatitude>();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class TLatitude {
        int Lat;
        int IndCarte;
    }
    Maintenant, dans mon code, j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Vector<TZoom> Zoom = new Vector<TZoom>();
    		Zoom.add(Zoom.size(), null);
    J'ai réussi à écrire ça, de ce que j'ai compris, j'ai ajouté un nouvel élément à Zoom, mais je n'ai pas trouvé comment accéder à ses composantes en écriture/lecture.

    Cordialement.

    Pierre

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Bonjour à toutes et à tous,

    Maintenant, dans mon code, j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Vector<TZoom> Zoom = new Vector<TZoom>();
    		Zoom.add(Zoom.size(), null);
    J'ai réussi à écrire ça, de ce que j'ai compris, j'ai ajouté un nouvel élément à Zoom, mais je n'ai pas trouvé comment accéder à ses composantes en écriture/lecture.
    Tu créer un vecteur de Tzoom.

    Donc Zoom.add() attends une instance de Tzoom.
    Dans ton cas tu lui demande d'écrire à l'index représenté par la taille de Zoom une valeur null

    Il serait plus judicieux de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Vector<TZoom> zooms = new Vector<>();
    TZoom tzoom = new TZoom();
    zooms.add(tzoom);
    Et pour relire un élément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zooms.get(index_souhaite);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Le problème n'est pas celui que je pensais, il est à la fois peut-être plus simple ou plus compliqué.

    Je vais considérer une autre classe, soit :

    Class TPos {
    double Lat;
    double Lon;
    }

    Ce que je veux faire :

    • Créer un vecteur de cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<TPos> Position = new Vector<TPos>();
    • puis, créer un premier élément de ce vecteur en y insérant les valeur Lat = 45 et Lon = 2
    • allons pour créer un deuxième élément avec Lat = 48 et Lon = 3
    • Après avoir créé ces deux éléments, je souhaite récupérer dans une variable "Latitude" la latitude du premier élément du vecteur et dans une variable "Longitude" la longitude du second élément du vecteur.


    J'ai trouvé des exemples ou le vecteur porte sur des objets de type Integer, String, ... qui sont des objets à un seul composant mais, je dois être fameusement nul, car je n'ai pas trouvé un seul exemple de syntaxe à utiliser quand l'objet comporte plusieurs composants, comme les miens.

    Je suppose que ça doit se compliquer lorsque l'un des composants est lui-même un vecteur.

    Cordialement.

    Pierre

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Créer un vecteur de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<TPos> position = new Vector<TPos>();
    puis, créer un premier élément de ce vecteur en y insérant les valeur Lat = 45 et Lon = 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TPos pos = new TPos(45,2); // je suppose ici que tu as un constructeur permettant ca , sinon il faudra évidemment modifier les propriétés concernées
    position.add(pos);
    allons pour créer un deuxième élément avec Lat = 48 et Lon = 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TPos pos = new TPos(48,3); 
    position.add(pos);
    je souhaite récupérer dans une variable "Latitude" la latitude du premier élément du vecteur et dans une variable "Longitude" la longitude du second élément du vecteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double latitude = position.get(0).Lat; // 45
    double longitude = position.get(1).Lon; //3
    Avant de faire ca il convient évidemment de vérifier la taille du vecteur pour ne pas créer une ArrayOutOfBoundException
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Juste après avoir répondu à ton explication de syntaxe de 15h40, j'ai plus ou moins compris ce que tu voulais me dire et j'ai fait ce 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
    		Vector<TPos> position = new Vector<TPos>();
    		TPos pos = new TPos(); // je crée une instance de TPos ... 
    		pos.Lat = 45; // je lui donne une valeur de latitude
    		pos.Lon = 2; // je lui donne une valeur de longitude
    		position.add(pos); // je l'ajoute au vecteur : premier élément
    //		pos = new TPos(); // je ne crée pas une nouvelle instance de TPos, mais ...
    		pos.Lat = 48; // j'en modifie la valeur de sa latitude : j'ai bien le droit ?
    		pos.Lon = 3; // j'en modifie la valeur de sa longitude : j'ai bien le droit ?
    		position.add(pos); // je l'ajoute au vecteur : deuxième élément
     
    		latitude = position.get(0).Lat; // je lis le premier élément et ... j'y trouve la valeur 48 au lieu de 45
    		longitude = position.get(0).Lon; // je lis le premier élément et ... j'y trouve la valeur 3 au lieu de 2
    		latitude = position.get(1).Lat; // je lis le premier élément et ... j'y trouve la valeur 48 au lieu de 45
    		longitude = position.get(0).Lon; // je lis le deuxième élément, j'y trouve la valeur 48 : normal
    		longitude = position.get(1).Lon; // je lis le deuxième élément, j'y trouve la valeur 3 : normal
    Ce que je ne comprends pas, c'est que je modifie les valeur de pos après avoir enregistré les premières valeurs dans le vecteur et que je retrouve ces dernières valeurs dans les deux éléments du vecteur ???

    J'ai bien le droit de modifier les composantes d'une instance sans avoir à en créer une autre.

    Qu'est ce qui cloche ?

    Cordialement.

    Pierre

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Qu'est ce qui cloche ?
    Tes connaissances en java

    En java les objets ne sont quasi jamais copiés mais référencés, donc

    Quand tu ajoute ton instance à ton vector
    Tu n'ajoute pas une copie de cette instance au vecteur mais tu dis à ton vecteur que sa case 0 pointe vers la référence de pos

    De fait quand plus loin tu modifie les valeurs de pos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pos.Lat = 48; // j'en modifie la valeur de sa latitude : j'ai bien le droit ?
    pos.Lon = 3;
    Comme c'est toujours la même instance , la référence présente dans ton vecteur pointe désormais vers ces nouvelles valeures.

    Et donc dans ton exemple , les case 0 et 1 de ton vector référence la même instance d'objet et ont donc les même valeur.

    Tu peux lire ce document pour comprendre un peu mieux : http://mickaelpechaud.free.fr/cours/referencesjava.pdf

    Note pour les éventuels énervés : Il y'a tout un débat sur le terme de "référence" au sein de la communauté java , c'est la masturbation intellectuelle , l'idée étant ici de bien comprendre qu'une seconde instance n'est pas créee
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème de gestion des exceptions
    Par Artasali dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/02/2007, 03h20
  2. Réponses: 3
    Dernier message: 18/01/2007, 16h25
  3. [SQL 2005] problèmes de gestion des chiffres décimaux
    Par skystef dans le forum Accès aux données
    Réponses: 1
    Dernier message: 10/01/2007, 11h40
  4. Problème de gestion des langues avec MFC
    Par Figaro dans le forum Visual C++
    Réponses: 4
    Dernier message: 20/11/2006, 15h56
  5. [FLASH 8] Problème de gestion des clips.
    Par glingo dans le forum Flash
    Réponses: 4
    Dernier message: 09/03/2006, 16h17

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