在Java中计算闰年

7

可能是重复问题:
Java计算闰年的代码是否正确?

这是一道作业题,我已经拿到了分数,但是我没有在我的代码中实现闰年。这是一个简单的程序,根据用户输入显示一个月中的天数。唯一的问题是,我不能想出一种实现闰年的方法,使二月份有29天而不是28天,而不编写多个 if 语句。肯定有更简单的方法吧?以下是代码:

//Displays number of days in a month

package chapter_3;

import java.util.Scanner;


public class Chapter_3 {

    public static void main(String[] args) {
        System.out.println("This program will calculate \n"
                + "the number of days in a month based upon \n"
                + "your input, when prompted please enter \n"
                + "the numerical value of the month you would like\n"
                + "to view including the year. Example: if you would like\n"
                + "to view March enter 3 2011 and so on.");

        Scanner input = new Scanner(System.in);

        //Prompt user for month and year
        System.out.print("Please enter the month and year: ");
        int month = input.nextInt();
        int year = input.nextInt();

        if (month == 1) {
            System.out.println("January " + year + " has 31 days");
        }   
        else if (month == 2) {
            System.out.println("February " + year + " has 28 days");
        }   
        else if (month == 3) {
            System.out.println("March " + year + " has 31 days");
        }
        else if (month == 4) {
            System.out.println("April " + year + " has 30 days");
        }
        else if (month == 5) {
            System.out.println("May " + year + " has 31 days");
        }
        else if (month == 6) {
            System.out.println("June " + year + " has 30 days");
        }
        else if (month == 7) {
            System.out.println("July " + year + " has 31 days");
        }
        else if (month == 8) {
            System.out.println("August " + year + " has 31 days");
        }
        else if (month == 9) {
            System.out.println("September " + year + " has 30 days");
         }
        else if (month == 10) {
            System.out.println("October " + year + " has 30 days");
        }
        else if (month == 11) {
            System.out.println("November " + year + " has 30 days");
        }
        else if (month == 12) {
            System.out.println("December " + year + " has 31 days");
         }
        else {
            System.out.println("Please enter the numerical value "
                + "of the month you would like to view");
        }
    }
}        

请参见http://codereview.stackexchange.com/。 - clstrfsck
3个回答

21

如果你使用GregorianCalendar,你可以按照以下方式操作:

判断给定的年份是否为闰年。如果给定的年份是闰年则返回true。要指定公元前的年份,需要用1-年份来表示。例如,公元前4年可以表示为-3。

GregorianCalendar cal = new GregorianCalendar();

if(cal.isLeapYear(year))
{
    System.out.print("Given year is leap year.");
}
else
{ 
    System.out.print("Given year is not leap year.");
}

14

引用自http://en.wikipedia.org/wiki/Leap_year

能被100整除的年份不是闰年,但如果能被400整除,则是闰年。

因此,如果你想重复造轮子:

boolean isLeapYear = year%4 == 0 && (year%100 != 0 || year%400 == 0)

但最优雅的解决方案(来自这里)可能是:

public static boolean isLeapYear(int year) {
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.YEAR, year);
  return cal.getActualMaximum(DAY_OF_YEAR) > 365;
}

3

你可以使用 switch 语句,在二月的 case 中加入一些 if 语句:

switch(month)
{
case 1:
    System.out.println("January " + year + " has 31 days");
    break;
case 2:
    int n=28;
    if(year%4==0 && (year%100!=0 || year%400==0)
        n++;
    System.out.println("February " + year + " has "+n+" days");
    break;
case 3:
    System.out.println("March " + year + " has 31 days");
    break;
case 4:
    System.out.println("April " + year + " has 30 days");
    break;
case 5:
    System.out.println("May " + year + " has 31 days");
    break;
case 6:
    System.out.println("June " + year + " has 30 days");
    break;
case 7:
    System.out.println("July " + year + " has 31 days");
    break;
case 8:
    System.out.println("August " + year + " has 31 days");
    break;
case 9:
    System.out.println("September " + year + " has 30 days");
    break;
case 10:
    System.out.println("October " + year + " has 30 days");
    break;
case 11:
    System.out.println("November " + year + " has 30 days");
    break;
case 12:
    System.out.println("December " + year + " has 31 days");
    break;
default case:
    System.out.println("Please enter the numerical value of the month you would like to view");
}

请查看http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接