OVH Cloud OVH Cloud

Sauvegarder une valeur

6 réponses
Avatar
Skunk
Bonjour à tous,

Je suis débutant en Java et j'essaie de sauvegarder la valeur d'entrée
d'une fonction dans une autre classe mais sans utiliser une
éciture/lecture dans un fichier.
Je m'explique, j'ai par exemple une classe Test1 :

package SaveTest;
public class Save1 {
static int i;

public static void main(String[] args) {
i = 4;
MyObserver.setInputValue(i);
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je désire sauvegarder la valeur d'entréede foo() (ici 4) dans une autre
classe. Je crée pour cela une classe MyObs :

package SaveTest;
public class MyObs {
static int intInputValue;

public static void setInputValue(int inp)
{
intInputValue = inp;
}
}

Je compile ces 2 fichiers et exécute Save1.class. Ok, la valeur
MyObs.intInputValue est bien égale à 4.

Le problème c'est que j'aimerais ensuite pouvoir réutiliser cette valeur
dans une autre classe, par exemple celle-ci :

package SaveTest;
public class Save2 {
static int i;

public static void main(String[] args) {
i = MyObs.intInputValue * 2;
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je compile et execute cette fois Save2 mais 'MyObs.intInputValue' me
donne alors comme valeur 0 (et non 4).
Comment faire pour que la classe MyObs sauvegarde cette valeur
intInputValue (un peu comme si elle devenait une constante) ?
La solution la plus évidente serait d'écrire la valeur d'input de foo de
Save1 dans un fichier pour ensuite la relire depuis la classe Save2.
Mais est-il possible de réaliser ce passage de paramètres entre
différentes classes sans utiliser de fichier ?

Merci !

6 réponses

Avatar
jj

Bonjour à tous,

Je suis débutant en Java et j'essaie de sauvegarder la valeur d'entrée
d'une fonction dans une autre classe mais sans utiliser une
éciture/lecture dans un fichier.
Je m'explique, j'ai par exemple une classe Test1 :

package SaveTest;
public class Save1 {
static int i;

public static void main(String[] args) {
i = 4;
MyObserver.setInputValue(i);
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je désire sauvegarder la valeur d'entréede foo() (ici 4) dans une autre
classe. Je crée pour cela une classe MyObs :

package SaveTest;
public class MyObs {
static int intInputValue;

public static void setInputValue(int inp)
{
intInputValue = inp;
}
}

Je compile ces 2 fichiers et exécute Save1.class. Ok, la valeur
MyObs.intInputValue est bien égale à 4.

Le problème c'est que j'aimerais ensuite pouvoir réutiliser cette valeur
dans une autre classe, par exemple celle-ci :

package SaveTest;
public class Save2 {
static int i;

public static void main(String[] args) {
i = MyObs.intInputValue * 2;
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je compile et execute cette fois Save2 mais 'MyObs.intInputValue' me
donne alors comme valeur 0 (et non 4).
Comment faire pour que la classe MyObs sauvegarde cette valeur
intInputValue (un peu comme si elle devenait une constante) ?
La solution la plus évidente serait d'écrire la valeur d'input de foo de
Save1 dans un fichier pour ensuite la relire depuis la classe Save2.
Mais est-il possible de réaliser ce passage de paramètres entre
différentes classes sans utiliser de fichier ?

Merci !


Avatar
jj
Bonjour,

Je ne suis pas un expert mais je pense que cela ne marche pas parce que
vous ne déclarez pas dans la classe save2 un objet de la classe MyObs.
De plus il me semble que les données des classes sont privées et on ne
peut y accéder par MyObs.intInputValue
En principe on crée une méthode dans MyObs qui retourne la valeur de la
variable intInputValue. Accessoirement on peut ajouter un contructeur à
la classe MyObs qui placerait une valeur entière dans cette variable.

public class MyObs
{
static int intInputValue;

public MyObs(int i)
{
intInputValue = i;
}


public static void setInputValue(int inp)
{
intInputValue = inp;
}


public int getInputValue()
{
return InputValue;
}

...


Ensuite pour l'utiliser on écrirait en global


MyObs mo = new Myobs(0); //si on veut une valeur initiale

et pour placer une autre valeur

mo.setInputValue(4);

pour accéder à son contenu

int e=mo.getInputValue();
Avatar
jj
Bonjour,

Je ne suis pas un expert mais je pense que cela ne marche pas parce que
vous ne déclarez pas d'objet de la classe MyObs. De plus il me semble
que les données des classes sont privées et on ne peut y accéder par
MyObs.intInputValue
En principe on crée une méthode dans MyObs qui retourne la valeur de la
variable intInputValue. Accessoirement on peut ajouter un contructeur à
la classe MyObs qui placerait une valeur entière dans cette variable.

public class MyObs
{
static int intInputValue;

public MyObs(int i)
{
intInputValue = i;
}


public static void setInputValue(int inp)
{
intInputValue = inp;
}


public int getInputValue()
{
return InputValue;
}

...


Ensuite pour l'utiliser on écrirait en global


MyObs mo = new Myobs(0); //si on veut une valeur initiale

et pour placer une autre valeur

mo.setInputValue(4);

pour accéder à son contenu

int e=mo.getInputValue();
Avatar
Jacques-Olivier Haenni
Bonjour,

Si j'ai bien compris ce qui a été fait, le problème est qu'une nouvelle
JVM est lancée pour Save2. Autrement dit, Save1 et Save2 sont dans deux
exécutions différentes. Aucune valeur n'est automatiquement conservée
d'une exécution à une autre (pour cela, utiliser une DB ou un fichier).

Il faudrait plutôt essayer le code suivant, qui aura certainement le
résultat escompté (je n'ai pas testé ce code, il se peut donc qu'il
reste une ou deux fautes de frappe):

package SaveTest;
public class Save3 {

public static void main(String[] args) {
int i = 4;
MyObserver.setInputValue(i);
System.out.println(foo(i));

int j = MyObs.intInputValue * 2;
System.output.println(foo(j));
}

public static int foo(int num) {
return 9 + num;
}
}

Note que puisqu'il y a une méthode setInputValue, ce sera bien d'avoir
le pendant getInputValue plutôt que d'accéder directement au champ.

Jacques-Olivier


Skunk wrote:

Bonjour à tous,

Je suis débutant en Java et j'essaie de sauvegarder la valeur d'entrée
d'une fonction dans une autre classe mais sans utiliser une
éciture/lecture dans un fichier.
Je m'explique, j'ai par exemple une classe Test1 :

package SaveTest;
public class Save1 {
static int i;

public static void main(String[] args) {
i = 4;
MyObserver.setInputValue(i);
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je désire sauvegarder la valeur d'entréede foo() (ici 4) dans une
autre classe. Je crée pour cela une classe MyObs :

package SaveTest;
public class MyObs {
static int intInputValue;

public static void setInputValue(int inp)
{
intInputValue = inp;
}
}

Je compile ces 2 fichiers et exécute Save1.class. Ok, la valeur
MyObs.intInputValue est bien égale à 4.

Le problème c'est que j'aimerais ensuite pouvoir réutiliser cette
valeur dans une autre classe, par exemple celle-ci :

package SaveTest;
public class Save2 {
static int i;

public static void main(String[] args) {
i = MyObs.intInputValue * 2;
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}

Je compile et execute cette fois Save2 mais 'MyObs.intInputValue' me
donne alors comme valeur 0 (et non 4).
Comment faire pour que la classe MyObs sauvegarde cette valeur
intInputValue (un peu comme si elle devenait une constante) ?
La solution la plus évidente serait d'écrire la valeur d'input de foo
de Save1 dans un fichier pour ensuite la relire depuis la classe Save2.
Mais est-il possible de réaliser ce passage de paramètres entre
différentes classes sans utiliser de fichier ?

Merci !


Avatar
damien guerin
La sérialisation est ton amie... ;)
Avatar
Thomas Escolan
Salut,

Il existe une API de préférences dans Java (1.4+ je suppose) ;
elle permet de sauvegarder des données dans le système (base de registres
sous Windows, système de fichiers sous Unix/Linux) d'une session à
l'autre... et d'une JVM à l'autre, donc.
Exemple (pour la route) :
Preferences node = Preferences.userNodeForPackage(getClass());
node.putString(<clef>, <valeur>);

Tu devrais trouver tout ceci utile.

"Skunk" a écrit dans le message de news:
42bd5e20$0$18641$
Bonjour à tous,

Je suis débutant en Java et j'essaie de sauvegarder la valeur d'entrée
d'une fonction dans une autre classe mais sans utiliser une
éciture/lecture dans un fichier.
Je m'explique, j'ai par exemple une classe Test1 :

package SaveTest;
public class Save1 {
static int i;

public static void main(String[] args) {
i = 4;
MyObserver.setInputValue(i);
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}
Je désire sauvegarder la valeur d'entréede foo() (ici 4) dans une autre
classe. Je crée pour cela une classe MyObs :

package SaveTest;
public class MyObs {
static int intInputValue;

public static void setInputValue(int inp)
{
intInputValue = inp;
}
}

Je compile ces 2 fichiers et exécute Save1.class. Ok, la valeur
MyObs.intInputValue est bien égale à 4.

Le problème c'est que j'aimerais ensuite pouvoir réutiliser cette valeur
dans une autre classe, par exemple celle-ci :

package SaveTest;
public class Save2 {
static int i;

public static void main(String[] args) {
i = MyObs.intInputValue * 2;
foo(i);
}

public static int foo(int num) {
return 9 + num;
}
}
Je compile et execute cette fois Save2 mais 'MyObs.intInputValue' me donne
alors comme valeur 0 (et non 4).
Comment faire pour que la classe MyObs sauvegarde cette valeur
intInputValue (un peu comme si elle devenait une constante) ?
La solution la plus évidente serait d'écrire la valeur d'input de foo de
Save1 dans un fichier pour ensuite la relire depuis la classe Save2.
Mais est-il possible de réaliser ce passage de paramètres entre
différentes classes sans utiliser de fichier ?

Merci !