【发布时间】:2014-06-17 12:56:23
【问题描述】:
定义一个 Java 方法,它接受三个整数值(月、日和年)作为参数,并 返回一年中的那一天的数字(1 到 365 之间的整数,或闰年为 366)。您的 方法应具有以下标头: public static int dayNum (int month, int day, int year) 要计算给定日期的天数,请使用以下公式:
一个。 dayNum = 31 * (月 - 1) + 日
b.如果月份在二月 (2) 之后,则从 dayNum 中减去 (4 * month + 23)/10。
c。如果年份是闰年并且日期在 2 月 29 日之后,请将 dayNum 加 1。
例如,考虑 2000 年 3 月 2 日。dayNum 是 31 * (3 - 1) + 2,或 64。三月在之后 二月,所以我们减去 (4 * 3 - 23)/10,或 35/10,或 3(记得使用整数除法,即 截断余数)。这给了我们 61 天的数字。但是,2000 年是闰年,并且 3 月 2 日在 2 月 29 日之后,因此我们将 dayNum 加 1。我们的最终答案告诉我们,2000 年 3 月 2 日, 是一年中的第 62 天。
当我测试这种方法时,我一直得到不准确的结果。如果我输入 2000 年 3 月 2 日,它告诉我它是第 64 天,如果我输入 2 月 29 日,它告诉我它是第 57 天。对我的代码进行任何符合分配规范的修改以及对我做错的解释将不胜感激。
public static int dayNum (int month, int day, int year)
{
int dayNum;
dayNum = 31 * (month - 1) + day;
if(month==2)
{
dayNum = dayNum - (4 * month + 23)/10;
if(((year % 4==0 || year % 400 == 0 && (year % 100 != 0)))&&(month>2))
{
dayNum= dayNum + 1;
}
}
return dayNum;
【问题讨论】:
-
“三月在二月之后”,但您的
if语句只检查二月? -
我不确定这是否有帮助,但 b 部分有 (4*3 + 23),c 之后有 (4*3-23)
-
这不是失败的原因 - 但您的闰年表达式是错误的。
-
应该是
year % 400==0 || year % 4 == 0 && year % 100 != 0- 在任何你喜欢的地方插入括号(几乎),这样对你来说最易读。
标签: java math if-statement conditional