着名的farenheit到celcius问题...有人可以帮助我解决问题

时间:2015-08-10 07:57:01

标签: java

这是一个奇怪的问题:

所以当我为Farenheit选择1时,它会提示我输入Farenheit值。

然后它将采用FarenHeitToCelcius方法。出于某种原因,celcius总是返回0.0

非常感谢任何形式的帮助

package Exercises;
import java.util.Scanner;

public class TemperatureCOnversion {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner input = new Scanner(System.in);
    System.out.println("Enter 1 to return Celcius or 2 for Farenheit: ");
    System.out.println("Your CHOICE: ");
    int choice = input.nextInt();
     switch(choice){

     case 1:
        System.out.println("Enter the Fareheit for celcius calculation: ");
        double farenheit = input.nextDouble();
        System.out.println(farenheit);
        double celcius_result = FarenHeitToCelcius(farenheit);
        System.out.println(celcius_result);
        break;
     case 2:
         System.out.println("Enter the Celcius for Farenheit calculation: ");
            double celcius1 = input.nextDouble();
            double farenheit_result = CelciusToFarenheit(celcius1);
            break;
     default:
         System.out.println(" **********Invalid Entry ******");
         break;


     }

  }

  public static double FarenHeitToCelcius(double f){
    //double celcius = 0;
    double celcius = (5/9)*(f -32);
    System.out.println(" The equivalent celcius temperature is: " + celcius);
    return celcius;

  }

  public static double CelciusToFarenheit(double c){
    double farenheit =( (9/5*c) + 32);
    System.out.println(" The equivalent fareheit temperature is: " + farenheit);
    return farenheit;
  }


}

3 个答案:

答案 0 :(得分:4)

5/9将执行integer division,返回0.您需要将其中一个整数转换为加倍,例如

double celcius = ((double)5/9)*(f -32);

double celcius = (5.0/9)*(f -32);    

这将首先将5转换为double,然后将此double除以9,这将得到正确的除法结果。

CelciusToFarenheit方法中,没有问题,因为,在行中:

double farenheit =( (9/5*c) + 32);

9/5*c被评估为9/(5*c),其中c是双精度,因此5*c首先返回一个double,然后将9分为此double。所以那里没有整数除法。

答案 1 :(得分:1)

我认为(5/9)结果为0(两个数字都是整数 - 结果为整数),请将其替换为(5.0 / 9.0)(5d / 9d)

答案 2 :(得分:0)

问题出在这一行:

double celcius = (5/9)*(f -32);

5/9将被解释为int 5 / int 9 - 它将始终返回0,因为9确实适合5 0次。

因为你想用double操作,这可以工作:

double celcius = (5.0 / 9.0) * (f - 32);