Problème entre objet d'une même classe
Résolu/Fermé
Kasuba
Messages postés
11
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
-
4 déc. 2008 à 20:29
Kasuba Messages postés 11 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 22 décembre 2008 - 22 déc. 2008 à 07:18
Kasuba Messages postés 11 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 22 décembre 2008 - 22 déc. 2008 à 07:18
A voir également:
- Problème entre objet d'une même classe
- Vente objet occasion entre particulier - Guide
- Identifier un objet à partir d'une photo - Guide
- Retrouver photo de classe gratuitement - Forum Réseaux sociaux
- Ou peut-on retrouver d'anciennes photos d'école et d'anciens élèves ? ✓ - Forum Loisirs / Divertissements
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Programmation
7 réponses
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
16 déc. 2008 à 11:12
16 déc. 2008 à 11:12
Bonjour,
Le problème que j'identifie ici, c'est que utilises des attributs d'instances qui n'ont rien à faire en tant qu'attribut d'instance. Je m'explique :
air2=new Air(t_low,hr_low); : arrête moi si je me trompe, mais ici tu utilises des objets ou types primitifs qui ont été déclarés ailleurs que dans ta méthode (en l'occurrence ça doit être des attributs d'instance).
Pour ma part, je considère notamment que air2 n'a pas à être passé en attribut d'instance vu que tu te permets de le réinstancier dans cette méthode.
La première question que tu dois te poser, c'est "est-ce que air2 est bien une caractéristique de ma classe, autrement dit, est-ce que ça a un sens conceptuellement parlant de le déclarer comme attribut ?"
Si la réponse est non, tu peux essayer ça :
Ensuite, vérifie bien que air1 et air2 ne pointent pas sur les mêmes éléments (t_low et hr_low par exemple sont aussi des attributs d'instance). Un problème peut survenir si tu fais par exemple :
Cordialement,
Le problème que j'identifie ici, c'est que utilises des attributs d'instances qui n'ont rien à faire en tant qu'attribut d'instance. Je m'explique :
air2=new Air(t_low,hr_low); : arrête moi si je me trompe, mais ici tu utilises des objets ou types primitifs qui ont été déclarés ailleurs que dans ta méthode (en l'occurrence ça doit être des attributs d'instance).
Pour ma part, je considère notamment que air2 n'a pas à être passé en attribut d'instance vu que tu te permets de le réinstancier dans cette méthode.
La première question que tu dois te poser, c'est "est-ce que air2 est bien une caractéristique de ma classe, autrement dit, est-ce que ça a un sens conceptuellement parlant de le déclarer comme attribut ?"
Si la réponse est non, tu peux essayer ça :
public double getEnergyConsumption(Air air1){ Air air2=new Air(t_low,hr_low); System.out.println("temperature de l'air"+air1.getTemperature()); System.out.println("temperature de l'air"+air2.getTemperature()); consumption = air2.enthalpy() - air1.enthalpy(); return consumption; }
Ensuite, vérifie bien que air1 et air2 ne pointent pas sur les mêmes éléments (t_low et hr_low par exemple sont aussi des attributs d'instance). Un problème peut survenir si tu fais par exemple :
Integer t_low = new Integer(5); Integer hr_low = new Integer(6); Air air1 = new Air(t_low, hr_low); //air1.getTLow().intValue() retourne 5 t_low = new Integer(8); hr_low = new Integer(9); Air air2 = new Air(t_low, hr_low); /*ATTENTION : ici air1 pointe sur t_low et hr_low qui ont été modifié!*/ //air1.getTLow().intValue() retourne 8 !
Cordialement,
Kasuba
Messages postés
11
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
21 déc. 2008 à 14:22
21 déc. 2008 à 14:22
merci beaucoup pour votre réponse. pour ce qui concerne air2, je l'ai maintenant instancié dans la classe mère car c'est une caractéristique de cette classe:
air2 = new Air(t_low,hr_high);
coolAir= new Air(t_high,hr_low);
j'écris cela dans le constucteur de la classe mère. suivant que je mes ces lignes dans un ordre ou dans un autre, les deux attribut température de air2 et coolAir pointe vers le dernier attribut créé. ici en l'occurence t_high. je touve ca bizare...
par ailleurs, auriez vous une idée pour la 2e partie de ma question? je pense que c'est du a la même raison, tout les objet point vers le dernier "st.nextToken" je ne vois donc pas trop comment m'en sortir... j'ai essayer de faire
String d = newString(st.nexToken());
rien n'y fait...
merci beaucoup !
air2 = new Air(t_low,hr_high);
coolAir= new Air(t_high,hr_low);
j'écris cela dans le constucteur de la classe mère. suivant que je mes ces lignes dans un ordre ou dans un autre, les deux attribut température de air2 et coolAir pointe vers le dernier attribut créé. ici en l'occurence t_high. je touve ca bizare...
par ailleurs, auriez vous une idée pour la 2e partie de ma question? je pense que c'est du a la même raison, tout les objet point vers le dernier "st.nextToken" je ne vois donc pas trop comment m'en sortir... j'ai essayer de faire
String d = newString(st.nexToken());
rien n'y fait...
merci beaucoup !
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
21 déc. 2008 à 20:04
21 déc. 2008 à 20:04
Bonjour,
Postes ici le code de ta classe Air stp.
Quand au problème avec ton string tokeniser, peux-tu reposter uniquement la méthode qui pose problème stp (en la mettant entre les balises "code" et en l'indentant que ce soit plus lisible) stp.
Merci.
Cordialement,
Postes ici le code de ta classe Air stp.
Quand au problème avec ton string tokeniser, peux-tu reposter uniquement la méthode qui pose problème stp (en la mettant entre les balises "code" et en l'indentant que ce soit plus lisible) stp.
Merci.
Cordialement,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Kasuba
Messages postés
11
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
21 déc. 2008 à 22:44
21 déc. 2008 à 22:44
voici ma classe air :
" import java.awt.*;
import java.io.*;
import java.lang.Math;
public class Air{
private static double temperature=0;
private static double hr=0;
private static final double cpa=1.03073; //chaleur masique de l'air sec à 12 degré +- la variation de cp est très légère entre 0 et 25 degré on
private static double h; //entalpie par kg d'air sec // fait l'hypothèse qu'elle est constante sur cet interval chaleur massique = chaleur molaire /"mu"
private static double psat;
private static double x; //humidité absolue
public Air(double temperature, double hr){ //créer un nouvel objet air pour l'état de l'air après traitement
this.temperature = temperature;
this.hr = hr;
psat=Math.pow(10.0,2.7877 + ((7.625 *this.temperature) / (241.6 + this.temperature )) );
//System.out.println(date +" " + hour +" "+ temperature + " " + hr);
}
public static double x(){
return (0.622*hr*psat/(101.325-hr*psat));
}
public static double psat(double t){
return psat;
}
public static double enthalpy(){
return (cpa*temperature);
}
public static double getTemperature(){
return temperature;
}
public static double getHr(){
return hr;
}
} "
merci beacoup de ton aide
" import java.awt.*;
import java.io.*;
import java.lang.Math;
public class Air{
private static double temperature=0;
private static double hr=0;
private static final double cpa=1.03073; //chaleur masique de l'air sec à 12 degré +- la variation de cp est très légère entre 0 et 25 degré on
private static double h; //entalpie par kg d'air sec // fait l'hypothèse qu'elle est constante sur cet interval chaleur massique = chaleur molaire /"mu"
private static double psat;
private static double x; //humidité absolue
public Air(double temperature, double hr){ //créer un nouvel objet air pour l'état de l'air après traitement
this.temperature = temperature;
this.hr = hr;
psat=Math.pow(10.0,2.7877 + ((7.625 *this.temperature) / (241.6 + this.temperature )) );
//System.out.println(date +" " + hour +" "+ temperature + " " + hr);
}
public static double x(){
return (0.622*hr*psat/(101.325-hr*psat));
}
public static double psat(double t){
return psat;
}
public static double enthalpy(){
return (cpa*temperature);
}
public static double getTemperature(){
return temperature;
}
public static double getHr(){
return hr;
}
} "
merci beacoup de ton aide
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
21 déc. 2008 à 22:49
21 déc. 2008 à 22:49
Bonsoir,
Il faut supprimer le mot clé static devant tes attributs !
Static signifie que l'attribut est commun à toutes les instances de Air. Autrement dit, quand tu crées air1, il a les bonnes valeurs, et dès que tu crées air2, alors toutes tes instances de Air (et notamment air1) vont prendre les nouvelles valeurs.
Quand au problème avec ton string tokeniser, peux-tu reposter uniquement la méthode qui pose problème stp (en la mettant entre les balises "code" et en l'indentant que ce soit plus lisible) stp.
Merci.
Cordialement,
Il faut supprimer le mot clé static devant tes attributs !
Static signifie que l'attribut est commun à toutes les instances de Air. Autrement dit, quand tu crées air1, il a les bonnes valeurs, et dès que tu crées air2, alors toutes tes instances de Air (et notamment air1) vont prendre les nouvelles valeurs.
Quand au problème avec ton string tokeniser, peux-tu reposter uniquement la méthode qui pose problème stp (en la mettant entre les balises "code" et en l'indentant que ce soit plus lisible) stp.
Merci.
Cordialement,
Kasuba
Messages postés
11
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
21 déc. 2008 à 22:55
21 déc. 2008 à 22:55
et voici la fonction qui me pose problème elle se trouve dans une autre classe "ReadFile":
public static Vector read() {
try{
Reader r1 = new FileReader(file1);
BufferedReader br1 = new BufferedReader(r1);
while ( (line = br1.readLine()) != null ){
StringTokenizer st1 = new StringTokenizer(line, " ");
String d=new String(st1.nextToken());
String h=new String (st1.nextToken());
String t=new String (st1.nextToken());
String hr=new String (st1.nextToken());
if ( d.compareTo(startDate)==0 ){
start=true;
}
if (d.compareTo(endDate)==0 && h.compareTo(endHour)==0){
stop=true;
}
if(stop){
" airFeatures.add(new Air(convertTemperature(t), convertHr(hr))); "
System.out.println("stop lecture fichier1");
r1.close();
return airFeatures;
}
if(start){
" airFeatures.add(new Air( convertTemperature(t), convertHr(hr))); "
}
}
}
catch(IOException err){
System.out.println("problem");
}
return airFeatures;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
les partie entre guillemets sont celle qui posent problème. si j'affiche au fur et a mesure t d hr et h pas de soucis ils sont tous différents, mais quans je récupère airFeatures à l'extérieur de la fonction, tout les attributs des objets créers pointe vers ceux du dernier. si par contre je crée un vector avec uniquement les différent d ou hr ou h ou t, la il n'y a pas de problème avec le même code.
le fichier texte se présente sous la forme:
20/10/2006 23:00 6,7 67%
21/10/2006 00:00 6,8 68%
la fonction convertTemperature fait partie de la même classe et converti juste le String correspondant a la température en double.
encore merci de te pencher la dessus
public static Vector read() {
try{
Reader r1 = new FileReader(file1);
BufferedReader br1 = new BufferedReader(r1);
while ( (line = br1.readLine()) != null ){
StringTokenizer st1 = new StringTokenizer(line, " ");
String d=new String(st1.nextToken());
String h=new String (st1.nextToken());
String t=new String (st1.nextToken());
String hr=new String (st1.nextToken());
if ( d.compareTo(startDate)==0 ){
start=true;
}
if (d.compareTo(endDate)==0 && h.compareTo(endHour)==0){
stop=true;
}
if(stop){
" airFeatures.add(new Air(convertTemperature(t), convertHr(hr))); "
System.out.println("stop lecture fichier1");
r1.close();
return airFeatures;
}
if(start){
" airFeatures.add(new Air( convertTemperature(t), convertHr(hr))); "
}
}
}
catch(IOException err){
System.out.println("problem");
}
return airFeatures;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
les partie entre guillemets sont celle qui posent problème. si j'affiche au fur et a mesure t d hr et h pas de soucis ils sont tous différents, mais quans je récupère airFeatures à l'extérieur de la fonction, tout les attributs des objets créers pointe vers ceux du dernier. si par contre je crée un vector avec uniquement les différent d ou hr ou h ou t, la il n'y a pas de problème avec le même code.
le fichier texte se présente sous la forme:
20/10/2006 23:00 6,7 67%
21/10/2006 00:00 6,8 68%
la fonction convertTemperature fait partie de la même classe et converti juste le String correspondant a la température en double.
encore merci de te pencher la dessus
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
21 déc. 2008 à 23:35
21 déc. 2008 à 23:35
Regarde le post 6, en principe ça règle tous tes problèmes.
Cordialement,
Cordialement,
Kasuba
Messages postés
11
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
22 déc. 2008 à 07:18
22 déc. 2008 à 07:18
merci 1000 fois!
j'étais sur que c'était une bétise. je n'avais jamais bien compris cette notion de static. ca marche maintenant.
j'étais sur que c'était une bétise. je n'avais jamais bien compris cette notion de static. ca marche maintenant.