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

Java Discussion :

Modifier une variable d'une classe depuis une autre classe


Sujet :

Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Modifier une variable d'une classe depuis une autre classe
    Salut !!

    j'ai un gros problème !!!

    ça peut paraitre tout bête mais pour moi qui débute en java, c'est un véritable casse tête !!

    je note mon code et je vous dis après mon problème :

    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
    package communicationVariable.copy.copy;
     
    import java.util.*;
     
    public class montantAajouter {
     
        public int montant;
        Scanner lectureClavier = new Scanner(System.in);
        public valeurAmodifier V = new valeurAmodifier();
     
        public montantAajouter()
        {
            System.out.println("veuillez saisir le montant a ajouter : ");
            montant = lectureClavier.nextInt();
            V.setvaleur(montant);
        }
    }
    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
    import java.util.*;
     
    public class valeurAmodifier {
     
        int valeur;
        Scanner lectureClavier = new Scanner(System.in);
        montantAajouter M;
     
        public void creerValeur()
        {
            System.out.println("veuillez saisir la valeur de la variable : ");
            valeur = lectureClavier.nextInt();
        }
     
        public int setvaleur(int a)
        {
            valeur = valeur + a;
            return valeur;
        }
     
        public void afficher()
        {
            System.out.println("la valeur de la variable est de : " + valeur);
        }
     
    }


    Voila, mon problème est que je souhaiterais modifier la variable "valeur" de la classe "valeurAmodifier" par la saisie d'un montant à ajouter dans la classe "montantAajouter"

    mais rien n'y fais, soit j'ai des erreurs soit la fonction afficher() ne prend pas e compte le montant que j'ai ajouter.......



    PS : j'ai bien trouver des astuces pour contourner le problème mais je me dis qu'il doit quand même bien y avoir une solution !!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Comme tu débutes tu n'as pas du comprendre ce que fait cette ligne :

    public valeurAmodifier V = new valeurAmodifier();


    Ici tu demandes à Java de créer un nouvel objet 'V' valeurAmodifier.
    Donc java va chercher dans cet objet le constructeur sans paramètre. Et donc il n'en trouve pas, V vaut null au final ce qui a pour conséquence que la plupart des méthodes sur lui vont faire un NullPointerException.

    Je te laisse créer le constructeur par toi même.

    Un conseil pour plus tard quand même, evite de déclarer des attributs sans modificateur (public ou private ou protected) car sinon elle ne seront pas accessible dans les classes filles définies dans un autre package et tu ne comprendras pas pourquoi.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    salut et merci pour ta réponse

    il est vrai que pour moi ça reste encore assez vague

    j'avais créé un constructeur pour la classe "valeurAmodifier" qui est en fait ma méthode creerValeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void creerValeur()
    {
    System.out.println("veuillez saisir la valeur de la variable : ");
    valeur = lectureClavier.nextInt();
    }
    mais dans ma fonction "main", j'appelais les deux contructeurs par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    valeurAmodifier V = new valeurAmodifier(); // pour saisir la variable "valeur"
    montantAajouter M = new montantAajouter(); // pour indiquer le montant a ajouter
    V.afficher(); //pour afficher la variable valeur
    le problème dans cette situation est que l'on me demande deux fois de saisir la variable "valeur" (puisqu'il y a "public valeurAmodifier V = new valeurAmodifier();" dans la classe montantAajouter)

    et en plus, la méthode afficher ne tient pas compte du montant à ajouter :


    veuillez saisir la valeur de la variable :
    25
    veuillez saisir la valeur de la variable :
    30
    veuillez saisir le montant a ajouter :
    25
    la valeur de la variable est de : 25

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Ton programme n'est pas bon car tu ne travaile pas sur la même instance de ton objet, c'est pour ça que cela ne calcule rien.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    donc ce n'est pas possible ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message


    Ici tu demandes à Java de créer un nouvel objet 'V' valeurAmodifier.
    Donc java va chercher dans cet objet le constructeur sans paramètre. Et donc il n'en trouve pas, V vaut null au final
    A la bonne heure, bien sur que non. Ce constructeur est implicite quand aucun constructeur n'a été déclaré, donc rien à faire de ce coté là. Et quand le constructeur n'existe pas, ça ne compile pas, tout simplement.

    Citation Envoyé par Kezado Voir le message
    donc ce n'est pas possible ?
    Si, mais tes deux méthodes: main et creerValeur doivent se partager et travailelr sur la même instance. Le plus simple serait de mettre un getter dans montantAajouter qui retourne l'instance de valeurAmodifier utilisée, pour que main y aie accès et puisse l'afficher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class montantAajouter {
        //.....
        public ValeurAmodifier getValeurAModifier(){return V;}
        //.....
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    montantAajouter M = new montantAajouter(); // pour indiquer le montant a ajouter
    M.getValeurAModifier().afficher(); //pour afficher la variable valeur

    PS: corrige tous tes noms. En java, par convention:

    les nom de classe commencent par une Majuscule
    les nom d'attributs et de variables commencent par une minuscule

    et pas l'inverse.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ta réponse tchize.

    je me rend compte que j'ai encore beaucoup de choses à voir, je m'en retourne dans mes livres

    Bonne soirée et bonne continuation

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    A la bonne heure, bien sur que non. Ce constructeur est implicite quand aucun constructeur n'a été déclaré, donc rien à faire de ce coté là. Et quand le constructeur n'existe pas, ça ne compile pas, tout simplement.
    Merci de la précision, mais cela ne change rien l'objet vaut null de toute manière. Le sujet ici étant de comprendre ce qu'est une instance d'un objet et comment travailler dessus.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    Merci de la précision, mais cela ne change rien l'objet vaut null de toute manière.
    Nan mais pas du tout, en fait. C'est n'importe quoi.
    - Si un constructeur est appelé et ne fait pas d'exception, l'objet n'est pas null.
    - Si ça ne compile pas, il n'y a pas d'objet qui vaut null ou quoi que ce soit. Ça ne compile pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2010, 14h34
  2. Réponses: 9
    Dernier message: 05/11/2008, 09h37
  3. Réponses: 5
    Dernier message: 28/04/2008, 12h46
  4. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  5. Réponses: 7
    Dernier message: 13/03/2006, 15h39

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