Je suis donc supposé créer un programme qui règle la température en degrés Celsius et en farenheit. J'y crée une méthode égale. Ensuite, je dois créer un pilote qui l'exécute et teste les températures pour voir si elles sont égales ou non, en utilisant la méthode égale. Je ne peux pas obtenir les valeurs booléennes correctes, ça continue à cracher faux. Frapper un mur ici. Le code est le suivant:Je n'arrive pas à faire fonctionner mes valeurs booléennes
classe publique Température { public enum Échelle {CELSIUS, FARENHEIT};
public static final double DEFAULT_DEGREES = 0.0;
private double temperature;
private Scale scale;
public Temperature()
{
this(Temperature.DEFAULT_DEGREES);
}//default
public Temperature(double newTemperature)
{
this(newTemperature, Scale.CELSIUS);
}//ending bracket of constructor double
public Temperature(Scale newScale)
{
this(0, newScale);
}//end of constructor scale
public Temperature(double newTemperature, Scale newScale)
{
this.setTemperature(newTemperature);
this.setScale(newScale);
}//end bracket of constructor degrees and scale
public Scale getScale()
{
return this.scale;
}//end of method getScale
public void setScale(Scale newScale)
{
this.scale=newScale;
}//end of method setScale
public double getTemperature()
{
return this.temperature;
}//ending bracket of metho getTemperature
public void setTemperature(double newTemperature)
{
if(newTemperature < Temperature.DEFAULT_DEGREES)
{
this.temperature=Temperature.DEFAULT_DEGREES;
}
else
{
this.temperature = newTemperature;
}//ending of if
}//ending bracket of method setTemperature
public double getTemperatureInFarenheit()
{
double rv;
if(this.getScale() == Scale.CELSIUS)
{
rv= this.getTemperature();
}
else
{
rv = ((this.getTemperature()* 1.8) + 32);
}//end of if
return rv;
}//end of bracket of method getweightinfarenheit
public double getTemperatureInCelsius()
{
double rv;
if(this.getScale() == Scale.FARENHEIT)
{
rv = this.getTemperature();
}
else
{
rv= ((this.getTemperature()- 32) * 0.5556);
}
return rv;
}//end of method gettemperatureincelsius
public boolean equals(Object otherObject)
{
boolean rv = false;
if(otherObject instanceof Temperature)
{
Temperature otherTemperature = (Temperature)otherObject;
if((this.getTemperature()== otherTemperature.getTemperature())
&&(this.getScale()== otherTemperature.getScale()))
{
rv = true;
}//end of nested if
}//end of if
return rv;
}//end of bracket method equals
} // fin de la classe
Ceci est mon pilote:
public class TemperatureDriver {
public static void main(String[]args)
{
Temperature w1 = new Temperature();
w1.setTemperature(32);
w1.setScale(Temperature.Scale.FARENHEIT);
Temperature w2 = new Temperature();
w2.setTemperature(0);
w2.setScale(Temperature.Scale.CELSIUS);
System.out.println(w1.equals(w2));
Temperature w3 = new Temperature();
w3.setTemperature(-40.0);
w3.setScale(Temperature.Scale.FARENHEIT);
Temperature w4 = new Temperature();
w4.setTemperature(-40.0);
w4.setScale(Temperature.Scale.CELSIUS);
System.out.println(w3.equals(w4));
Temperature w5 = new Temperature();
w5.setTemperature(212);
w5.setScale(Temperature.Scale.FARENHEIT);
Temperature w6 = new Temperature();
w6.setTemperature(100);
w6.setScale(Temperature.Scale.CELSIUS);
System.out.println(w5.equals(w6));
}//end of method main
} // fin de la classe Temperaturedriver
plutôt que de tester l'égalité lorsque vous effectuez des conversions avec des approximations décimales, il peut être plus logique de voir si deux choses diffèrent de moins que epsilon. En outre, je trouve le GetTemperatureinCelsius déroutant, car il convertit lorsque l'échelle est Celsius mais pas Fahrenheit. Est-ce en arrière? –
Malheureusement, le professeur que je suis insiste sur le fait que nous testons l'égalité lorsque nous effectuons des conversions. En ce qui concerne la question getTemperatureInCelsius, si vous regardez au-dessus de cela theres ... InFarenheit ci-dessus, devrais-je les mettre comme un seul bloc et en faire une déclaration sinon else? – Thalazon
Donc je pense alors que le 1.8 fonctionnera (bien que je puisse préférer multiplier par 9 et diviser par 5), mais je pense que vous avez besoin de * 5 et diviser par 9 où vous avez 0.5556, parce que les choses seront presque égales autrement. Cependant, je n'ai aucun problème avec les tests d'égalité. Je vous suggérais de mettre en œuvre vos équivalents en testant si la valeur absolue de la différence de température est inférieure à epsioln plutôt que d'utiliser == sur les réels. –