Problème java modification du constructeur

Fermé
FMMF88 Messages postés 5 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 28 décembre 2009 - 22 déc. 2009 à 15:52
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 - 23 déc. 2009 à 12:00
Bonjour,

j'ai un projet à réaliser dans le cadre de mes études et je rencontre des problèmes.

je voudrais pouvoir modifier les paramètres de mon constructeur après sa création. Par exemple si j'ai un déclaré un objet:
exemple O = new exemple(a,b,c)
je voudrais pouvoir changer la valeur de a et que cela influe sur mon objet O. Je me doute qu'il doit falloir utiliser des paramètres et/ou des méthodes statiques mais je ne vois pas comment agencer tout ça.

je vous remercie d'avance pour votre aide.

bonnes fêtes de fin d'année
A voir également:

4 réponses

Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
22 déc. 2009 à 16:01
Bonjour,

Ce sont de simples set et get que tu demande ?

Tu veux seulement changer la valeur du parametres a ?

Dans ce cas :

public void setA ( string monA){
A = monA;
}

public string getA(){
return A;
}

Le set te permettra de changer la valeur de A, et le get de l'obtenir. C'est ca que tu voulais ?
0
FMMF88 Messages postés 5 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 28 décembre 2009
23 déc. 2009 à 10:25
bonjour,

merci pour ta réponse. Mais en fait mon problème repose aussi sur le fait que ma classe est une classe héritée. J'utilise donc le terme super et ce sont les paramètres de super que je souhaite ensuite modifier. voilà un exemple de mon constructeur et de la méthode qui devrait modifier ce constructeur:

double x1;
double x2;
double y1;
double y2;
static double a;
static double b;
static double c;

public Droite2Points(Point A,Point B)
{super(a,b,c);
x1 = A.abscisse();
y1 = A.ordonnee();
x2 = B.abscisse();
y2 = B.ordonnee();

}

public void instanciate(){
a = x1;
b = y1;
c = (y2-y1)/(x2-x1);

}

et même en mettant des méthodes set et get je ne voie pas comment résoudre le problème.

merci d'avance.
0
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
23 déc. 2009 à 10:29
Tu ne peux pas modifer les parametres de la classe super dans la classe hérité, je crois.

Si tu compte modifier les parametres a, b, et c de la classe super, tu dois faire les méthodes get et set dans celle ci, puis, l'appeler avec le mot clé super.

Je sais pas si je suis assez clair...si ?
0
FMMF88 Messages postés 5 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 28 décembre 2009
23 déc. 2009 à 11:24
j'ai fais les modifications. Si j'ai bien tout compris maintenant ma classe mère ressemble à :

public Droite(double a,double b,double c)
{ this.a=a;
this.b=b;
this.c=c;
x1 = a;
y1 = b;
x2 = x1+1;
y2 = y1+c;
}
public void set_a(double abis)
{ a = abis;
}
public void set_b(double bbis)
{ b = bbis;
}
public void set_c(double cbis)
{ c = cbis;
}

et ma classe fille est maintenant :
public Droite2Points(Point A,Point B)
{super(a,b,c);
x1 = A.abscisse();
y1 = A.ordonnee();
x2 = B.abscisse();
y2 = B.ordonnee();

}

public void instanciate(){
super.set_a(x1) ;
super.set_b(y1) ;
super.set_c((y2-y1)/(x2-x1));

}

Si c'est bien cela ça ne marche toujours pas. Les valeurs de a,b et c reste toujours à 0. elle ne semble pas avoir été modifié. As tu une idée du problème.

merci d'avance
0
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
23 déc. 2009 à 11:30
Hum, ca m'a l'air correct, pourtant...

Question toute bête, tu es sûr que x1, y1, etc... ne sont pas égal a 0 ?

Egalement, tu ne l'as pas marqué, mais tu as bien declaré les attributs a, b, c, x1, etc... dans la classe mère (et pareil dans la classe fille) ?
0
FMMF88 Messages postés 5 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 28 décembre 2009
23 déc. 2009 à 11:43
oui j'ai bien déclaré toutes mes variables. Mais en fait le problème c'est que quand je crée la variable a de la classe fille je ne l'initialise pas. Du coup je suppose qu'elle doit prendre une valeur par défaut à 0. Et ensuite cette valeur ne veut pas être modifié (même par les set). Du coup dans le constructeur de la classe mère j'ai a,b et c qui sont à 0 et toutes les valeurs qui en découlent sont fausses (notamment x1,y1,...). En plus je divise par 0 à un moment et j'obtiens des NaN.

J'avais pensé que c'était peut-être une mauvaise utilisation du terme "static" dans la classe fille mais je suis obligé de le mettre vu que j'invoque un constructeur par super (sinon il me souligne en rouge).

Voilà si tu as d'autres idées je suis preneur ou si tu veux des précisions sur mon code hésite pas.

merci d'avance
0
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
23 déc. 2009 à 12:00
Ah, oui, en effet, si tu initialise pas les varaibles a, b et c, ca va pas aller...

Mais...pourquoi tu ne les initialise pas ?

Et je ne vois pas ou sont tes "static", non plus.

Le Java commence a être un peu loin pour moi, je mélange les notions ^^'
0