JAVA : recuperer une variable qui a été set

Fermé
lionheartilly Messages postés 3 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 25 août 2012 - 25 août 2012 à 21:59
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 25 août 2012 à 23:47
Bonjour,

Je viens de débuter en JAVA.

Mon problème : recupperer dans une classe, une variable qui a été set dans une autre classe. J'arrive à la récuppérer, mais elle n'est pas à la valeur que je venait de set, elle est réinitialisée à 0. pourquoi ?

Je vous explique vite fait les liens entre mes classes (je réécris pas tout le blabal des constructeurs etc...)

Class Main
{
ClassA a = new ClassA();
a.setVariable(valeur_desiree);
ClassB b = new ClassB();
b.getVariable();
}

ClassA
{
int variable;

public void setVariable(valeur_desiree)
{
variable = valeur_desiree;
}

public int getVariable()
{
return variable;
}

}

ClassB
{
ClassA a = new ClassA();
int valeur_recuperee = a.getVariable();

int nouvelle_valeur = valeur_recuperee + 10;
}

Donc par exemple si dans ma class Main j'ai appelé la classA pour set ma variable à 5, puis j'appelle ma classB qui elle recupère la variable dans la classA (qui devrait donc etre égale à 5 vu qu'on vient de la set), et bien ça ne marche pas, je n'arrive pas à récuperer 5 mais 0, comme si variable avait été réinitialisée. Comment faire pour récuperer correctement la valeur de la variable qui vient d'etre modifiée ?

Merci =)

4 réponses

arth Messages postés 9373 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 366
25 août 2012 à 22:09
Plusieurs façon de faire.

Mais si l'on fait new ClassA(), cela crée une nouvelle instance de classe.

Si dans le constructeur de la classe A, rien n'ai fait pour mettre la variable à une autre valeur que 0, alors il est normal de récupérer 0.

De plus, cela fait 3 classe alors qu'une seule aurait suffit. Parce que tel quel, sans explication, avoir 3 classes pour faire ça ne sert strictement à rien.
0
lionheartilly Messages postés 3 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 25 août 2012
25 août 2012 à 22:48
Merci de ta réponse.

C'est bien ce que je pensais, que refaire un new Class relançait une nouvelle instance donc ramenait les variables à leur valeur de base (ici 0).
Donc si je comprends bien, il faut que dans le constructeur de ma classA, il faut que je fasse un truc genre :

this.valeur = valeur;

Comme ça, quand je relance new ClassA à partir de ClassB, je récupérerai la variable avec la valeur set ?

Ou alors est-ce que dans ClassB, il n'y a pas un autre moyen de faire appel à classA sans créer une nouvelle instance ? Voire directement appeler la methode getVariable de ClassA directement dans classB ?

Sinon mes différentes classes sont plus complexes que ça, ne t'inquiètes pas, j'ai juste résumé le problème. Oui, il n'y aurait pas d'interet à créer 3 classes juste pour faire une opération débile =)
0
lionheartilly Messages postés 3 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 25 août 2012
25 août 2012 à 23:37
Je crois que j'ai trouvé :
il faut que je déclare static la variable dans ma classA.
Comme ça, quand je la set une fois dans mon Main, puis que je la get dans ma classB, la variable restera égale à la valeur que j'avais définie dans mon set.
(je peux pas le tester maintenant, j'ai pas eclipse sur le pc ou je suis, mais merci de me confirmer si c'est ça qu'il faut faire.)
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
25 août 2012 à 23:47
Je crois que tu n'as pas encore bien la notion d'objet.

"relançait une nouvelle instance donc ramenait les variables à leur valeur de base"
Ce ne sont pas les mêmes variables ! Chaque objet aura ses variables propres, donc faire un set sur un objet ne modifiera pas les valeurs sur les autres objets... ou alors il faut utiliser des variables statiques, mais est-ce que c'est ce que tu veux !?

Pour mieux comprendre ton problème, pourrais-tu refaire ton code en Java correct ?
Parce que là je suis un peu perdu avec ton pseudo-code, j'ai du mal à voir si ce sont des instructions de classes, des constructeurs, ou des main, c'est très différent.

Exemple :

// Ton pseudo code
Class Main
{
ClassA a = new ClassA();
a.setVariable(valeur_desiree);
ClassB b = new ClassB();
b.getVariable();
}

// Des instructions de classe
<code>class Main
{
    ClassA a = new ClassA(); // Attribut de la classe
    {
         a.setVariable(valeur_desiree);
    }

    ClassB b = new ClassB();
    {
        b.getVariable();
    }
}

// Un constructeur
class Main
{
    Main()
    {
        ClassA a = new ClassA(); // Variable locale du constructeur
        a.setVariable(valeur_desiree);
        ClassB b = new ClassB();
        b.getVariable();
    }
}

// Un main
class Main
{
    public static void main(String...args)
    {
        ClassA a = new ClassA(); // Variable locale du main
        a.setVariable(valeur_desiree);
        ClassB b = new ClassB();
        b.getVariable();
     }
}
0