Метод преобразования температуры Вывод Java
Я должен написать класс под названием температура, и моя единственная проблема - когда я пытаюсь вызвать метод преобразования. Всякий раз, когда я запускаю основную программу, выход преобразования равен 0.0
Это как-то связано с использованием приватной переменной?
Код ниже.
Большое спасибо!
public class Temperature {
private double temp;
private String scale;
public Temperature(double temp) {
this.temp = temp;
}
public String toString () {
return "your temp is " + this.temp;
}
public double getTemp() {
return this.temp;
}
public String getScale(String scale) {
this.scale = scale;
return this.scale;
}
public double conversion() {
double temp = 0;
if (this.scale == "fahrenheit") {
temp = (this.temp - 32) * (double)(5/9);
}
else if (this.scale == "celsius") {
temp = (this.temp * (double)(9/5)) + 32;
}
return temp;
}
public boolean aboveBoiling(double temp) {
if (this.scale == "fahrenheit") {
return temp >= 212;
}
else if (this.scale == "celsius") {
return temp >= 100;
}
return true;
}
}
ниже мой тестовый драйвер для проверки вызовов функций
import java.util.*;
public class testdriver {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Temperature userTemp;
String userScale;
//userTemp = new Temperature(1.0);
System.out.print("Please enter your temp scale(fahrenheit or celius): ");
userScale = sc.next();
System.out.println();
System.out.print("Please enter your temp in " + userScale + ": ");
userTemp = new Temperature(sc.nextDouble());
System.out.println();
System.out.println(userTemp.toString());
System.out.println();
System.out.println("your temp is: " + userTemp.getTemp());
System.out.println();
System.out.println("your scale is: " + userTemp.getScale(userScale));
System.out.println();
System.out.println(userTemp.conversion());
System.out.println();
double userTemp2 = userTemp.conversion();
System.out.println(userTemp.aboveBoiling(userTemp2));
}
}
3 ответа
Замещать this.scale == "fahrenheit"
а также this.scale == "celcius"
от this.scale.equals("fahrenheit")
а также this.scale.equals("celcius").
В Java оператор == сравнивает только ссылки или примитивные значения (int, long, float, double...).
Изменить: я нашел еще одну проблему в вашем коде:
(this.temp - 32) * (double)(5/9);
5 и 9 являются целыми числами, тогда деление приведет к 0. Вам нужно привести один из операндов к двойному перед операцией /:
(this.temp - 32) * ((double)5/9);
или же:
(this.temp - 32) * (5./9.);
Я вижу две проблемы с вашим кодом.
1) Строковое равенство: используйте равенства и не == для строкового равенства в Java. Они полностью отличаются в Java и используются только для примитивного равенства типов данных.
2) вам нужно создать публичный метод для установки масштаба. Вы нигде не устанавливаете значение масштаба
public void setScale (String scale){
this.scale=scale;
}
and your getter should be changed to
public String getScale() {
return scale;
}
Не является ли ваша проблема инициализацией переменной? когда вы используете this.temp, вы получаете "ноль" в методе преобразования, а не внешнее значение. На самом деле вам не нужно использовать это в этом случае.
Извините если я ошибаюсь