2017-02-13 14 views
0

Мне нужно написать класс, называемый температурой, и моя единственная проблема - когда я пытаюсь вызвать метод преобразования. Всякий раз, когда я запускаю основную программу, выход преобразования составляет 0,0Метод преобразования температуры Вывод Java

Связано ли это с использованием частной переменной?

Код приведен ниже.

Большое спасибо!

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)); 







} 

}

ответ

4

Заменить this.scale == "fahrenheit" и this.scale == "celcius" по this.scale.equals("fahrenheit") и this.scale.equals("celcius"). В Java оператор == сравнить только ссылки или примитивные значения (int, long, float, double ...).

Edit: я нашел еще одну проблему в коде:

(this.temp - 32) * (double)(5/9); 

5 и 9 представляют собой целые числа, то деление приведет к 0. Вы должны бросить один из операндов удвоить, до/операции :

(this.temp - 32) * ((double)5/9); 

или:

(this.temp - 32) * (5./9.); 
+1

согласен, и лучше будет перечисление –

+0

Согласовано. См. Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java. – rajah9

+0

im все еще получает выход 0.0:/ – Roach

0

Isnt вашей проблемы инициализации переменной? когда вы используете this.temp, вы используете «ноль» в методе преобразования, а не внешнее значение. Actualy Вы не должны использовать ЭТО в этом случае.

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

+0

также. .. Я думаю, что линия с temp = 0 не делает много, правильно? –

1

Я вижу две проблемы с кодом.

1) Строковое равенство: используйте equals и not == для равенства строк в java. Они полностью различаются в java и используются только для примитивного равенства типа данных.

2) вам нужно создать общедоступный метод установки шкалы. Вы не устанавливаете значение масштаба в любом месте

public void setScale (String scale){ 
this.scale=scale; 
} 

and your getter should be changed to 

public String getScale() { 
    return scale; 
} 
+0

Спасибо большое! Это помогло тонну! – Roach

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

  • Нет связанных вопросов^_^