一个城镇的预期午间温度用等式
建模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);
这是我写的,但由于某些原因,我的价值观没有任何意义。
答案 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);
}
}