2016-11-27 3 views
0

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

+0

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? –

+0

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

+0

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. –

Répondre

0

Alors il y a quelques problèmes que je vois. Tout d'abord, dans votre mise en œuvre de getTemperatureInCelsius()

if(this.getScale() == Scale.FARENHEIT) 

devrait, je pense,

if(this.getScale() == Scale.CELSIUS) 

et vice-versa pour votre mise en œuvre de getTemperatureInFarenheit. Une fois que ceux-ci sont corrigés, je pense que le problème principal avec vos égaux est qu'il insiste pour que les échelles soient les mêmes. Où avez-vous

if((this.getTemperature()== otherTemperature.getTemperature()) 
    &&(this.getScale()== otherTemperature.getScale())) 

à la place devrait être

if(this.getTemperatureInFarenheit()== otherTemperature.getTemperatureInFahrenheit()) 

où je comparais délibérément Farenheit pour éviter l'arrondi dans votre facteur de conversion celsius. Cela fera probablement travailler les égales (une fois que le correctif que j'ai mentionné pour getTemperatureInFarenheit est fait).

Je pense toujours que je me sentirais mieux de dire quelque chose comme

if(Math.abs(this.getTemperatureInFarenheit()-otherTemperature.getTemperatureInFahrenheit())<0.001) 

que ce que je propose ci-dessus, et je tenterais que si l'échec ci-dessus.

+0

Je ne sais pas pourquoi il ne m'est pas venu à l'esprit que la valeur décimale était ce qui le rejetait tout le temps! J'apprécie l'aide. – Thalazon