-3

我需要帮助制作一个程序,该程序需要用户输入年份和月份(例如 2012 3)并输出其中的天数,但是,它必须通过确定它是否是闰年来做到这一点,这样它可以告诉几个月有多少天,所以它不能预先编程,它必须自己计算。并且当输入无效月份(仅限 1-12)或输入负整数/小数时,必须提示重新输入。我不知道如何开始这个!

我确实开始了,否则我不会问,

System.out.println("请输入年月:");

    if (stdin.hasNextInt()) {
         yes = true;
    int year =  stdin.nextInt();
    int month = stdin.nextInt();
    }
        else {
            System.out.println("Invalid Input. ");}

    if (yes = true);

    }
}

我不知道如何让它将这两个数字作为单独的 INT(2012 3)以及如何拒绝月份(如果无效)或年份(如果无效)....

4

2 回答 2

1

让我们编写一个函数,它接受年月 (1..12) 数字并返回给定月份的天数

public int numberOfDays (int year, int month) {

大多数月份每年都有固定的天数,所以:

if (month==1||month==3||month==5||month==7||
    month==8||month==10||month==12) return 31;
if (month==4||month==6||month==9||month==11) return 30;

此时(如果函数没有返回),月份要么是二月,要么是无效月份。如果月份无效,让我们返回一个明显无效的值:

if (month!=2) return -1;

现在变得有趣了,因为闰年​​二月有 29 天,否则有 28 天。自 1582 年引入公历以来,闰年被定义为是 4 的倍数的年份,但 100 的倍数不是闰年,除非它们也是 400 的倍数(即 1600、2000 和 2004 是闰年; 1900 年和 2003 年不是)。

if (year>1582) {
 if (month%4==0&&(month%100!=0||month%400==0)) return 29; else return 28;
} 

1582 年之前,儒略历有效。在儒略历下,每年能被 4 整除的都是闰年。

else {
 //julian calendar
 if (month%4==0) return 29; else return 28;
}

现在代码调用numberOfDays

int days;
do {
 System.out.println("blah blah blah");
 int year  =  stdin.nextInt();
 int month = stdin.nextInt();
 days  =  numberOfDays(year,month);
} while (days<0);
于 2013-03-01T01:01:10.570 回答
1

您必须检查两件事来判断一年是否是闰年:

  1. 如果年份能被 4 整除,但不能被 100 整除,则为闰年。

  2. 如果年份能被 100 整除,又能被 400 整除,那么它就是闰年。

- 编码 uppppp

(也只是谷歌下一次->“如何判断一年是否是闰年”)

于 2013-03-01T00:56:59.960 回答