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

avec Java Discussion :

Problème pour récupérer valeur dans une classe


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut Problème pour récupérer valeur dans une classe
    Bonjour à tous,

    Je rencontre un soucis que je n'arrive pas à résoudre et qui sera forcément très simple pour vous, j'essaie de récupérer une valeur d'une variable que j'ai créé dans une autre classe ... Problème !

    Dans la classe où je veux récupérer cette valeur celle-ci se trouve à 0 au lieu de 2 en voici mon code :

    Code de la classe contenant la valeur que je veux récupérer :
    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
     
    public class A{
     
        /*
        * Les variables 
        */
        private static int R;     
     
        /*
        * Le constructeur
        */
        Coordinateur(){
            R = 0;
        }    
     
        /*
        * On démarre le coordinateur
        */
        public static void main(String[] args) {
     
            java.util.Scanner entree = new java.util.Scanner(System.in);
     
            /*
            * Les paramètres R
            */
            System.out.println("Veuillez saisir un nombre ");
    	R = Integer.valueOf(entree.next());
          }
     
        public static int getR(){
            return R;
        }
    }
    Code de la classe dont je souhaire récupérer la valeur contenu dans la variable R de la classe A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class B {
     
        public static void main(String[] args) {
     
            int r = A.getR();
            System.out.println(r);     // Ici j'ai 0 au lieu d'avoir la valeur qui a été saisie dans la classe A
     
        }    
    }
    Je vous remercie à tous d'avance pour votre aide

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut


    Le fait que tu ais deux méthodes main n'est pas utile ici.

    Ce que fait ton code :
    Quand tu lances le main défini dans A :
    - java crée un objet de type A
    - cette objet possède donc l'attribut R qui vaut 0
    - java lance la méthode main de l'objet
    - tu saisi ton entier au clavier
    - l'attribut R de ton objet prends la valeur saisie
    - fin du code

    Quand tu lances le main défini dans B :
    - java crée un objet de type B
    - java lance la méthode main de l'objet
    - r prend le résultat de la méthode getR() qui est appliqué à aucun objet A, donc 0 (valeur par défaut défini dans la classe A)
    - tu affiches r, donc 0
    - fin

    Et quand tu lances les deux en parallèles, il se passe c'est deux exécutions en parallèle et indépendamment.

  3. #3
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Il faut ne lancer que le main de ton objet de classe B.

    Dans ce main, il faut créer un objet de type A.
    Lancer une méthode sur cette objet qui réalise ce qui est écrit dans le main de la classe A. (Mais ne pas appeler cette méthode main)
    Puis lancer la méthode getR() sur l'objet de type A.


    PS : evite de définir un getter comme static, pour obliger à l'appeler sur un objet.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Merci Drowan pour ta réponse, j'ai bien compris ce que tu m'as expliqué et je me rend compte que mon exemple n'est pas complet. Je vais essayer d'être plus précis car cet exemple était dérivé du code de mon projet.

    Ma classe A doit s'exécuter en 1er est demandé à l'utilisateur de saisir des paramètres (des entiers), celles-ci une fois saisie vont servir d'information à d'autres classes notamment B. Lors de l'exécution, celle-ci va aller lire la valeur qui a été saisie dans A tout ça pour dire que je pense que je n'ai pas le choix que de mettre un main dans chaque classe.

    Tu en penses quoi ?

    Merci d'avance de ton aide.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il faut voir chaque main() lancé séparément comme 2 programmes indépendants qui ne partagent pas les mêmes zones de mémoire : les variables créées par l'un ne sont pas accessibles par l'autre. Le fait qu'il s'agisse de la même variable dans le code n'a aucun rapport. Tout comme quand tu lances 2 fois le même programme : tu ne retrouves pas les valeurs de la précédente exécution dans les variables de la seconde.

    Si tu lances les 2 classes à partir d'une troisième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Launcher {
     
       public static void main(String[] args) {
           A.main(args);
           B.main(args);
       }
     
    }
    Alors, là, oui, en lançant Launcher (par sa méthode main() donc), tu ne lanceras qu'un seul programme, et toutes les instances créées auront accès les unes au autres.

    Si les 2 programmes A et B doivent être lancé séparément, il faut utiliser un moyen de s'échanger les valeurs entre programmes : fichier, connexion UPD/TCP/RMI/HTTP/JNDI/Tout ce que tu veux... mais pas par la "mémoire" de chaque programme.

    Si ce n'est pas le cas, la question à se poser est pourquoi des méthodes main() dans ces 2 classes...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Bonsoir et merci joel.drigo,

    Alors la solution correspondant à mon besoin est celle-ci que tu as noté
    Si les 2 programmes A et B doivent être lancé séparément, il faut utiliser un moyen de s'échanger les valeurs entre programmes : fichier, connexion UPD/TCP/RMI/HTTP/JNDI/Tout ce que tu veux... mais pas par la "mémoire" de chaque programme.
    C'est tout à fait cela, cependant, ça m'a l'air plus compliqué que je ne le pensais, si je dois utiliser un fichier pour récupérer mes valeurs c'est un peu contraignant, en UDP c'est à dire ? Je dois utiliser RMI dans mon développement aucune utilité pour faire cet échange ?

    Merci d'avance.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/10/2011, 09h47
  2. récupérer valeur dans une class
    Par members dans le forum Débuter avec Java
    Réponses: 17
    Dernier message: 30/08/2009, 14h10
  3. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 16h28
  4. Réponses: 4
    Dernier message: 13/12/2006, 00h08
  5. Récupérer valeur dans une BD
    Par Matmal11 dans le forum Linux
    Réponses: 6
    Dernier message: 05/09/2006, 16h28

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