2016-11-27 3 views
0

Так что я должен создать программу, которая устанавливает температуру до цели и дальности. В нем я создаю метод equals. Затем я должен создать драйвер, который запускает его, и проверяет температуру, чтобы убедиться, что они равны или нет, используя метод equals. Я не могу получить правильные логические значения, он просто выплескивает ложь. Нажатие на стену здесь. Код выглядит следующим образом:Невозможно заставить мои логические значения работать

общественный класс Температура { public enum Scale {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 

} // окончание класса

Это мой водитель:

общественного класса 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 

} // конец класса Temperaturedriver

+0

вместо проверки на равенство, когда вы выполняете преобразования с десятичными приближениями, может возникнуть больше смысла, если две вещи отличаются менее чем на epsilon. Кроме того, я нахожу GetTemperatureinCelsius загадочным, потому что он преобразуется, когда шкала целилли, но не Фаренгейта. Это в обратном направлении? –

+0

К сожалению, профессор, которого я имею, настаивает, что мы проверяем равенство, когда делаем конверсии. Что касается вопроса getTemperatureInCelsius, если вы посмотрите выше, что theres ... InFarenheit над ним, я должен положить их как один блок и сделать его if if else? – Thalazon

+0

Итак, я думаю, что 1.8 будет работать (хотя я мог бы предпочесть умножить на 9 и делить на 5), но я думаю, вам нужно * 5 и делить на 9, где у вас 0.5556, потому что вещи будут почти равны в противном случае. Однако у меня нет проблем с тестированием на равенство. Я предлагал вам реализовать свои равные путем тестирования, если абсолютное значение разности температур меньше, чем epsioln, а не использовать == для реалов. –

ответ

0

Так есть пара проблем, которые я вижу. Во-первых, в вашей реализации getTemperatureInCelsius()

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

должно быть, я думаю,

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

и наоборот для реализации getTemperatureInFarenheit.

Как только они исправлены, я думаю, что основная проблема с вашими равными - это настаивать на том, чтобы шкалы были одинаковыми. Где у вас есть

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

вместо этого должен быть

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

где я намеренно сравнивая в Фаренгейта, чтобы избежать округления в вашем коэффициент цельсию. Это, вероятно, сделает работу равным (после того, как будет сделано исправление, упомянутое мной для getTemperatureInFarenheit).

Я все еще думаю, что я буду чувствовать себя лучше о говорить что-то вроде

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

, чем то, что я предложил выше, и я хотел бы попробовать, что если это не поможет.

+0

Я не знаю, почему мне не приходило в голову, что десятичное значение - это то, что отбрасывало его все время! Я ценю помощь. – Thalazon

Смежные вопросы