JAVA : recuperer une variable qui a été set

lionheartilly Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 =)

A voir également:

4 réponses

arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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