温度程序

时间:2016-02-29 18:50:00

标签: java math

  

一个城镇的预期午间温度用等式

建模
T = 35 sin( (2π/365)(n-100) ) + 50
     

其中T表示华氏度,n表示自年初以来的天数(1月1日= 1天)。 (上面的等式是数学;你需要将它翻译成Java。)

     

编写一个程序,要求用户输入日期编号n(整数),然后写出当天的预期温度T(双倍)。

    Scanner scan = new Scanner(System.in);
    int n; // number of days since the start of the year
    double t; // expected temperature for that day 


    // User enters the temperature at noon

    System.out.println("Enter the temperature at noon");
    n = scan.nextInt();


    // Compute expected temperature for this day. 

    t = 35 *Math.sin(Math.toRadians ( (2 * Math.PI ) / 365)*( n - 100 ) ) + 50;

    System.out.println(" The expected temperature for today is" + t); 

这是我写的,但由于某些原因,我的价值观没有任何意义。

2 个答案:

答案 0 :(得分:4)

我找到了您错误的原因:

等式:

  t = 35 *Math.sin(Math.toRadians ( (2 * Math.PI ) / 365)*( n - 100 ) ) + 50;

没问题但是 Math.PI实际上是一个弧度值......

所以sin函数的hole参数是将弧度转换为弧度,这是不正确的......

改为使用:

t = 35 *Math.sin((2 * Math.PI ) / 365)*( n - 100 ) ) + 50;

答案 1 :(得分:2)

这是一个具有正确数学的代码更易读(且可运行)的版本。

请注意,方法和合理命名的变量可以使您的意图更清晰。

我也倾向于在字符串中找到System.out.printf更清晰的打印值。

import java.util.Scanner;

class Main {
  private static double expectedTemp(int n) {
      return 35 * Math.sin(2 * Math.PI/365 * (n - 100)) + 50;
  }

  public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter the number of days since the beginning of the year (1-364): ");
      int n = scan.nextInt();

      double t = expectedTemp(n);
      System.out.printf("The expected temperature for today is %.02f.\n", t); 

      System.out.println("Enter the actual temperature at noon: ");
      double actual = scan.nextDouble(); 

      double tempDifference = actual - t; 
      System.out.printf("The difference between the predicted temperature and the actual temperature is %.02f.\n", tempDifference);

  }
}