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 :

Explication sur l'utilisation d'une classe dans un tableau


Sujet :

Android

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Explication sur l'utilisation d'une classe dans un tableau
    Bonjour à toutes et à tous,

    Dans mon application de Nav, j'ai besoin d'un tableau de valeurs de types différents. J'ai donc créé une classe regroupant ces valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class PTS {
    	public static String UTM_Z;
    	public static double UTM_N;
    	public static double UTM_E;
    	public static double Alti;
    	public static String Date;
    	public static int NoIcon;
    }
    J’instancie et remplis mon tableau avec des données GPS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		PTS Tbl [] = new PTS [NbPts]; // NbPts = nombre de points dans le tableau
    		for (int i = 0; i < NbPts; i++) {
    			Tbl[i].UTM_E = GPS.UTM_E;
    			Tbl[i].UTM_N = GPS.UTM_N;
    			Tbl[i].UTM_Z = GPS.UTM_Z;
    			Tbl[i].Alti = Double.parseDouble(Str.substring(47, 52));	// Altitude
    		}
    et là, je m'attendais à un plantage magnifique. Et bien non, en utilisant un "Toast", je lisais bien des valeurs dans mon tableau.

    Je m'attendais à un plantage car à chaque valeur du tableau, j'utilisais la classe "PTS" et non une instance nouvelle (pour chaque point du tableau) de cette classe. J'ai rajouté une instanciation pour chaque valeur du tableau ... ce qui n'a rien changé au résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		PTS Tbl [] = new PTS [NbPts]; // NbPts = nombre de points dans le tableau
    		for (int i = 0; i < NbPts; i++) {
    			Tbl[i] = new PTS(); // instanciation de la classe pour chaque point
    			Tbl[i].UTM_E = GPS.UTM_E;
    			Tbl[i].UTM_N = GPS.UTM_N;
    			Tbl[i].UTM_Z = GPS.UTM_Z;
    			Tbl[i].Alti = Double.parseDouble(Str.substring(47, 52));	// Altitude
    		}
    J'en ai déduit que l'instantiacion du tableau faisait en même temps NbPts instanciations de ma classe PTS. Vrai, Faux ?

    Merci pour vos éclaircissements.

    Pierre

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 228
    Points
    228
    Par défaut
    Bonjour ChPr,

    Moi je dis FAUX!!

    Un tableaux d'objets est un tableaux d'objets, et par définition un objet est l'instance d'une classe.

    Lorsque tu fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PTS Tbl [] = new PTS [NbPts]
    C'est la taille de Tbl en mémoire qui est changée, de sorte à ce que celle-ci puisse contenir au total NbPTs de PTS.

    Mais, ton cas est un peut particulier.
    Il faut bien voir que les variables déclarées dans PTS sont "static", et ce mot clé signifie que la variable ou méthode n'appartient pas à une instance particulière de la classe, mais à la classe elle même. Donc pas besoin d'instancier la classe, pour accéder au données.

    Si dans ton esprit PTS représente un objet, alors fait lui une classe digne de se nom (attribut privé, getter-setter...)
    Pensez à lire les règles du forum avant de poster.

    Si un poste ou un commentaire vous a été utile, merci de mettre un petit !
    Problème résolu? alors pensez à cliquer sur .
    Si vous avez trouvé la solution tout seul, merci de la poster, ça pourrait aider les suivants!

    Bonjour, s'il vous plaît et merci => ses mots ne coûtent rien, mais ils font toujours plaisirs!

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci pour cette précision.

    Mais je n'ai pas été rigoureux dans mes manips. Au départ, j'avais bien, comme noté, l'attribut "static" pour chacune de mes variables et, effectivement, cela fonctionnait sans que j'instancie ma classe pour chaque point du tableau.

    Eclipse me disait : "The static field PTS.UTM_Z should be accessed in a static way" et me proposait : "Remove static Modifier", ce que j'ai fait ... en oubliant, qu'entre temps, j'avais rajouté l'instanciation de la classe à chaque point du tableau et donc cela fonctionnait.

    Je viens de faire la manip inverse, c'est-à-dire, ne pas avoir le Modifier static et ne pas instancier chaque point : ça plante bien. Me voilà rassuré et cela confirme tes dires.

    Par ailleurs, tu as raison, autant faire une classe bien propre.

    Cordialement.

    Pierre

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/12/2006, 20h45
  2. [Débutant] Utilisation d'une classe dans une servlet
    Par stokoma1981 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 28/09/2006, 15h11
  3. Réponses: 4
    Dernier message: 25/07/2006, 16h30
  4. Utilisation d'une classe dans un autre fichier
    Par melotron dans le forum Général Python
    Réponses: 1
    Dernier message: 09/07/2006, 13h11
  5. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34

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