2017-02-13 1 views
0

Je dois écrire une classe appelée température et mon seul problème est quand j'essaie d'appeler la méthode de conversion. Chaque fois que j'exécute le programme principal, la sortie de la conversion est 0.0Méthode de conversion de température Sortie Java

Cela a-t-il quelque chose à voir avec l'utilisation d'une variable privée?

Le code est ci-dessous.

Merci beaucoup!

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; 

} 

}

ci-dessous est mon pilote d'essai pour tester la fonction appelle

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







} 

}

Répondre

4

Remplacer this.scale == "fahrenheit" et this.scale == "celcius" par this.scale.equals("fahrenheit") et this.scale.equals("celcius"). En java, l'opérateur == comparer uniquement références ou valeurs primitives (int, long, float, double ...).

Edit: je l'ai trouvé un autre problème dans votre code:

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

5 et 9 sont des nombres entiers, puis la division déboucheront sur 0. Vous devez jeter l'un des opérandes à doubler, avant la/opération :

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

ou:

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

d'accord, et mieux sera enum –

+0

D'accord. S'il vous plaît voir http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java. – rajah9

+0

Im toujours obtenir une sortie de 0,0:/ – Roach

0

Isnt votre problème de l'initialisation de la variable? Lorsque vous utilisez this.temp vous acessing le "zéro" dans la méthode de conversion pas la valeur externe. Vous n'avez pas besoin d'utiliser THIS dans ce cas.

Désolé si je m erreur

+0

aussi. .. Je pense que cette ligne avec temp = 0 ne fait pas beaucoup, non? –

1

Je vois deux problèmes avec votre code.

1) Chaîne d'égalité: utilisez égal et non == pour l'égalité des chaînes dans Java. Ils sont complètement différents dans Java et ne sont utilisés que pour l'égalité des types de données primitifs. 2) vous devez créer une méthode publique pour définir l'échelle. Vous ne définissez aucune valeur d'échelle nulle

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

and your getter should be changed to 

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

Merci beaucoup !! Cela a aidé une tonne! – Roach