获取一年的第n天
Get the nth day of a year
对于家庭作业,我想在 Jave 程序中计算某个日期在一年中的第 n 天。
所以,用户给出一个日期,然后它告诉我们这是一年中的第几天。所以 2019 年 1 月 1 日是第一天。
我已经有一个函数可以给出一个月中的天数。此功能还考虑了闰年。
所以我只需要一个 returns 一年中的第几天的函数。
我的想法,我不得不做,但它不起作用,因为我不能减少一个月:
static int dayNumberInYear(int day, Month month, int year)
{
while(month!=Month.JANUARY)
{
int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
Month month = month(-1);
}
return dayNumberInYear(day,month,year)+day;
}
我知道这是不对的,所以我希望有人能帮助我。
我认为 for-loop 更好,但我不知道如何。第一行,static int dayNumberInYear(int day, Month month, int year)
,我不能更改它,所以它必须是第一行。
我不允许使用 java JRE 日期操作 classes 像日历,
日期等!
我是初学者,希望有人能帮助我。
这是我到目前为止的代码:
package ;
import java.util.Scanner;
public class Easter
{
public static void main(String[] arguments)
{
Scanner scanner=new Scanner(System.in);
System.out.println("Enter the day month and year with spaces in between:");
int day=scanner.nextInt();
int monthNumber=scanner.nextInt();
Month month=Month.month(monthNumber);
int year=scanner.nextInt();
System.out.println("The month "+month+" has "+numberOfDaysInMonth(year,month)+" days in year "+year);
System.out.println("The number of this date in a year:"+dayNumberInYear(day,month,year));
scanner.close();
}
static boolean isLeapYear(int year)
{
if(year%100==0)
year=year/100;
if(year%4==0)
return true;
return false;
}
static int numberOfDaysInMonth(int year, Month month)
{
switch(month)
{
case APRIL:
case JUNE:
case SEPTEMBER:
case NOVEMBER:
return 30;
case FEBRUARY:
if(isLeapYear(year))
return 29;
return 28;
default:
return 31;
}
}
static int dayNumberInYear(int day, Month month, int year)
{
while(month!=Month.JANUARY)
{
int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
Month month = month(-1);
}
return dayNumberInYear(day,month,year)+day;
}
}
已经有预制的 class Month.java:
包裹;
public enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
public int number()
{
return ordinal()+1;
}
public static Month month(int number)
{
return values()[number-1];
}
}
package SO;
import java.time.Month;
public class test {
//below array contain number of total days in that month(non leap year).
static int arrTotal[] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
public static void main(String[] args) {
System.out.println(dayNumberInYear(3, Month.MARCH, 2019));
}
static int dayNumberInYear(int day, Month month, int year) {
int dayNumberInYear = day + numberOfDaysInMonth(year, month);
return dayNumberInYear;
}
private static int numberOfDaysInMonth(int year, Month month) {
int add = 0;
if (year % 4 == 0)
add++;
int a = month.getValue();
return arrTotal[(a - 2)] + add;
}
}
看起来你想要的想法是一种按月递减的递归方法。
static int dayNumberInYear(int day, Month month, int year)
{
if(!month.equals(Month.JANUARY)) {
return day + dayNumberInYear(numberOfDaysInMonth(month.minus(1), year), month.minus(1), year);
} else {
return day;
}
}
请注意,在这种递归方法中,基本情况是现在是一月,我们只是 return 一月的当天。否则,我们添加当月的第几天,然后添加前一个月的所有天数。
它也可以作为 for 循环完成。
static int dayNumberInYearByLoop(int day, Month month, int year) {
int totalDays = day;
for (int i = month.getValue();i>1;i--) {
totalDays += numberOfDaysInMonth(Month.of(i), year);
}
return totalDays;
}
你可以在这里乱搞我的代码:https://repl.it/repls/ConcreteDarkgreenSequence
对于家庭作业,我想在 Jave 程序中计算某个日期在一年中的第 n 天。
所以,用户给出一个日期,然后它告诉我们这是一年中的第几天。所以 2019 年 1 月 1 日是第一天。 我已经有一个函数可以给出一个月中的天数。此功能还考虑了闰年。 所以我只需要一个 returns 一年中的第几天的函数。 我的想法,我不得不做,但它不起作用,因为我不能减少一个月:
static int dayNumberInYear(int day, Month month, int year)
{
while(month!=Month.JANUARY)
{
int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
Month month = month(-1);
}
return dayNumberInYear(day,month,year)+day;
}
我知道这是不对的,所以我希望有人能帮助我。
我认为 for-loop 更好,但我不知道如何。第一行,static int dayNumberInYear(int day, Month month, int year)
,我不能更改它,所以它必须是第一行。
我不允许使用 java JRE 日期操作 classes 像日历,
日期等!
我是初学者,希望有人能帮助我。 这是我到目前为止的代码:
package ;
import java.util.Scanner;
public class Easter
{
public static void main(String[] arguments)
{
Scanner scanner=new Scanner(System.in);
System.out.println("Enter the day month and year with spaces in between:");
int day=scanner.nextInt();
int monthNumber=scanner.nextInt();
Month month=Month.month(monthNumber);
int year=scanner.nextInt();
System.out.println("The month "+month+" has "+numberOfDaysInMonth(year,month)+" days in year "+year);
System.out.println("The number of this date in a year:"+dayNumberInYear(day,month,year));
scanner.close();
}
static boolean isLeapYear(int year)
{
if(year%100==0)
year=year/100;
if(year%4==0)
return true;
return false;
}
static int numberOfDaysInMonth(int year, Month month)
{
switch(month)
{
case APRIL:
case JUNE:
case SEPTEMBER:
case NOVEMBER:
return 30;
case FEBRUARY:
if(isLeapYear(year))
return 29;
return 28;
default:
return 31;
}
}
static int dayNumberInYear(int day, Month month, int year)
{
while(month!=Month.JANUARY)
{
int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
Month month = month(-1);
}
return dayNumberInYear(day,month,year)+day;
}
}
已经有预制的 class Month.java: 包裹;
public enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
public int number()
{
return ordinal()+1;
}
public static Month month(int number)
{
return values()[number-1];
}
}
package SO;
import java.time.Month;
public class test {
//below array contain number of total days in that month(non leap year).
static int arrTotal[] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
public static void main(String[] args) {
System.out.println(dayNumberInYear(3, Month.MARCH, 2019));
}
static int dayNumberInYear(int day, Month month, int year) {
int dayNumberInYear = day + numberOfDaysInMonth(year, month);
return dayNumberInYear;
}
private static int numberOfDaysInMonth(int year, Month month) {
int add = 0;
if (year % 4 == 0)
add++;
int a = month.getValue();
return arrTotal[(a - 2)] + add;
}
}
看起来你想要的想法是一种按月递减的递归方法。
static int dayNumberInYear(int day, Month month, int year)
{
if(!month.equals(Month.JANUARY)) {
return day + dayNumberInYear(numberOfDaysInMonth(month.minus(1), year), month.minus(1), year);
} else {
return day;
}
}
请注意,在这种递归方法中,基本情况是现在是一月,我们只是 return 一月的当天。否则,我们添加当月的第几天,然后添加前一个月的所有天数。
它也可以作为 for 循环完成。
static int dayNumberInYearByLoop(int day, Month month, int year) {
int totalDays = day;
for (int i = month.getValue();i>1;i--) {
totalDays += numberOfDaysInMonth(Month.of(i), year);
}
return totalDays;
}
你可以在这里乱搞我的代码:https://repl.it/repls/ConcreteDarkgreenSequence