嗨以下方法不太有效:
public static int dayInYear(int day, int month, int year) {
// Returns the number (1.. 366) of the day on which day/month/year falls
int dayNumber = (month - 1) * 31 + day;
if (month > 2) {
dayNumber = dayNumber - ((4 * month + 23) / 10);
if (isLeapYear(year)) dayNumber++;
}
return dayNumber;
} // dayInYear
与
public static boolean isLeapYear(int year)
{
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
当我把它放入一个程序时,它编译但没有给出正确的答案 我做了桌面检查,问题出在dayInYear方法
例如:2009年2月5日应该收益36但我得到122
对正确方法的任何见解表示赞赏......
答案 0 :(得分:2)
看起来你正试图推出自己的日常计算器。但是,如果您想利用前面的开发人员的辛勤工作,您可以使用java.time类LocalDate
在一个简单的单行中进行此计算。
public static int dayInYear(int day, int month, int year) {
return LocalDate.of(year, month, day).getDayOfYear();
}
这些java.time类内置于Java 8及更高版本中,请参阅Oracle Tutorial。
答案 1 :(得分:1)
让我运行你的代码:
public static void main(String[] args) {
System.out.println(dayInYear(5, 2, 2009));
System.out.println(dayInYear(2, 5, 2009));
}
输出:
36
122
你说你得到122,所以你将它作为上述主要方法中的第二行调用:dayInYear(2, 5, 2009)
这相当于日期" 2009年5月2日" - 因为您自己的方法dayInYear
中的参数顺序是:日,月,年。
你说你想要日期" 2009年2月5日"。在这种情况下,您应该将其作为dayInYear(5, 2, 2009)
传递(上述主方法中的第一行)。然后结果是36,如你所料。
因此您的代码没有任何问题,但是,您需要正确调用它。