2017-02-13 2 views
0

Ich muss eine Klasse namens Temperatur schreiben und mein einziges Problem ist, wenn ich versuche, die Konvertierungsmethode aufzurufen. Wenn ich das Hauptprogramm ausführe, ist die Umwandlungsausgabe 0.0Temperaturkonvertierungsmethode Ausgabe von Java

Hat es etwas mit der Verwendung einer privaten Variablen zu tun?

Der Code ist unten.

Vielen Dank!

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; 

} 

}

unter meinem Testfahrer ist Funktion zu testen, ruft

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







} 

}

Antwort

4

ersetzen this.scale == "fahrenheit" und this.scale == "celcius" von this.scale.equals("fahrenheit") und this.scale.equals("celcius"). in Java, zu vergleichen, der Operator == nur Referenzen oder primitive Werte (int, long, float, double ...).

Edit: Ich fand ein anderes Problem in Ihrem Code:

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

5 und 9 ganze Zahlen sind, so ist die Teilung in 0. Sie müssen führen wird einer der Operanden werfen, zu verdoppeln, bevor der/Betrieb :

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

oder:

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

zustimmen, und besser wird enum sein –

+0

Einverstanden. Bitte sehen Sie http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java. – rajah9

+0

ich bekomme immer noch eine Ausgabe von 0.0:/ – Roach

0

Isnt Ihr Problem der Initialisierung der variablen? Wenn Sie this.temp verwenden, erhalten Sie die "Null" in der Konvertierungsmethode und nicht den externen Wert. In diesem Fall müssen Sie THIS nicht verwenden.

Sorry, wenn ich bin falsch

+0

auch. .. Ich denke, dass Linie mit Temp = 0 nicht viel tut, nicht wahr? –

1

ich zwei Probleme mit Ihrem Code.

1) String-Gleichheit: verwenden Sie gleich und nicht == für String-Gleichheit in Java. Sie sind in Java völlig unterschiedlich und werden nur für die primitive Datentypgleichheit verwendet.

2) Sie müssen eine öffentliche Methode zum Festlegen der Skalierung erstellen. Sie stellen den Wert der Skala nirgendwo ein

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

and your getter should be changed to 

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

Vielen Dank !! Dies half eine Tonne! – Roach