Метод преобразования температуры Вывод 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, вы получаете "ноль" в методе преобразования, а не внешнее значение. На самом деле вам не нужно использовать это в этом случае.

Извините если я ошибаюсь

Другие вопросы по тегам