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

Langage Java Discussion :

Instanciation dans une classe et hors de la classe


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut Instanciation dans une classe et hors de la classe
    Bonjour,

    J'ai besoin d'une classe "Figure" intégrant des ArrayList d'entiers. Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ArrayList <Integer> ValeursX = new ArrayList <Integer>();
    ArrayList <Integer> ValeursY = new ArrayList <Integer>();
    Figure figure = new Figure (ValeursX, ValeursY)
    avec dans le constructeur de Figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.ValeursX = ValeursX;
    this.ValeursY = ValeursY;
    je peux utiliser ce tableau depuis une autre classe.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Figure figure = new Figure();
    avec un 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 Figure(){
    	ArrayList <Integer> ValeursX = new ArrayList <Integer>();
    	ArrayList <Integer> ValeursY = new ArrayList <Integer>();
    	 }
    	public void addX (int N) {
    		Integer X = new Integer (N);
    		ValeursX.add(X);
    	}	
    	public int restX (int X) {
    		return ValeursX.get(X);
    	}	
    	public void addY (int N) {
    		Integer Y = new Integer (N);
    		ValeursY.add(Y);
    	}	
    	public int restY (int Y) {
    		return ValeursY.get(Y);
    	}
    	private <Integer> ValeursX;
    	private <Integer> ValeursY;
    cela ne marche pas. Cela marche à la rigeur si je déclare les ArrayList public dans Figure, et que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figure.ValeursX.get(i);
    par exemple. Mais cette solution ne me convient pas. J'ai évidemment besoin de plusieurs figures dans mon projet, et j'aurais aimé instancier les tableaux dans la classe Figure, et pas au dessus.

    Ce problème s'est posé bien souvent : pour que les classes communiquent, il faut qu'une classe les instancie toutes en quelques sortes, et je ne sais pas pourquoi. Quelqu'un pourrait-il me donner une explication s'il vous plaît?

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    Bonjour,

    tu a un problème au niveau de ton constructeur. Tu declare deux variable et tu n'utilise pas les ArrayList de ta class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            private <Integer> ValeursX;
    	private <Integer> ValeursY;
     
    	public Figure(){
    	this.ValeursX = new ArrayList <Integer>();
    	this.ValeursY = new ArrayList <Integer>();
    	 }
    tu peut aussi faire directement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            private <Integer> ValeursX = new ArrayList <Integer>();
    	private <Integer> ValeursY = new ArrayList <Integer>();

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut
    Oh! Cela marche!! Merci Rolfone.

    Pourrais-tu juste m'expliquer pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private <Integer> ValeursX;
    private <Integer> ValeursY;
     
    public Figure(){
    	this.ValeursX = new ArrayList <Integer>();
    	this.ValeursY = new ArrayList <Integer>();
    	 }
    marche et pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Figure(){
    	ArrayList <Integer> ValeursX = new ArrayList <Integer>();
    	ArrayList <Integer> ValeursY = new ArrayList <Integer>();
    	 }
    private <Integer> ValeursX;
    private <Integer> ValeursY;
    ??? J'aimerais juste comprendre. Sans doute ai-je mal assimilé le sens du mot clef "this"??

    Merci encore en tous les cas.

  4. #4
    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,

    Citation Envoyé par HNoury Voir le message
    ??? J'aimerais juste comprendre. Sans doute ai-je mal assimilé le sens du mot clef "this"??

    Merci encore en tous les cas.
    le problème n'est pas que tu n'as pas compris le mot clé this, mais plutôt que tu n'as pas compris la portée des variables.

    Avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Figure(){
    	ArrayList<Integer> ValeursX = new ArrayList<Integer>();
    	ArrayList<Integer> ValeursY = new ArrayList<Integer>();
    	 }
    private ArrayList<Integer> ValeursX;
    private ArrayList<Integer> ValeursY;
    Tu n'as pas deux variables, mais quatre variables !
    Deux qui ont une portée au niveau de la classe, et deux dont la portée est le constructeur Figure.

    le mot clé this permet simplement de dire que tu utilises les variables de la classe.
    Tu peux aussi ecrire comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private ArrayList<Integer> ValeursX;
    private ArrayList<Integer> ValeursY;
     
    public Figure(){
    	ValeursX = new ArrayList<Integer>();
    	ValeursY = new ArrayList<Integer>();
    	 }
    pour que tu comprennes bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private ArrayList<Integer> ValeursX;
    private ArrayList<Integer> ValeursY;
     
    public Figure(){
            ArrayList<Integer> ValeursX;
    	this.ValeursX = new ArrayList<Integer>(); //ici j'utilise ValeurX de la classe.
            ValeursX = new ArrayList<Integer>(); //ici j'utilise ValeurX du constructeur.
    	this.ValeursY = new ArrayList<Integer>();
    	 }
    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

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut
    Merci Alkhan. C'est un problème qui se posait souvent dans mes petits programmes java (je programme des petits trucs pour moi de temps en temps) et je suis ravi de comprendre enfin pourquoi ce problème. Je m'en souviendrai. Merci!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2014, 10h00
  2. [PEAR][HTML_QuickForm] Instanciation dans une classe
    Par Bownobo dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2008, 16h38
  3. [Pointeurs] Instanciation dans une fonction
    Par Arnaud F. dans le forum C++
    Réponses: 7
    Dernier message: 17/12/2007, 16h05
  4. Instanciation dans une fonction inline
    Par mister3957 dans le forum C++
    Réponses: 5
    Dernier message: 04/03/2007, 19h27
  5. [POO] Comment acceder a un objet javascript instancie dans une page mere
    Par herbert dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/07/2006, 19h34

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