可能重复:
Java Code for calculating Leap Year, is this code correct?
这是作业,我已经收到了我的成绩,但我没有在我的代码中实现闰年。这是一个简单的程序,可根据用户输入显示一个月内的数字。唯一的问题是我无法弄清楚实现闰年的方法,即在没有编写多个if
语句的情况下,2月而不是28天可以获得29天。当然有一种更简单的方法吗?这是代码:
//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");
}
}
}
答案 0 :(得分:17)
如果您使用GregorianCalendar
,则可以执行以下操作
确定给定年份是否为闰年。如果给定,则返回true 年是闰年。要指定BC年份编号,必须使用1年编号 被给予。例如,BC 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.");
}
答案 1 :(得分:7)
引用http://en.wikipedia.org/wiki/Leap_year
除非它们,否则可被100整除的年数不是闰年 也可以被400整除,在这种情况下它们是闰年。
所以,如果你想重新发明轮子:
boolean isLeapYear = year%4 == 0 && (year%100 != 0 || year%400 == 0)
但最优雅的解决方案(取自here)可能是
public static boolean isLeapYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
return cal.getActualMaximum(DAY_OF_YEAR) > 365;
}
答案 2 :(得分:3)
你可以使用switch语句,在二月案例中有一些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了解详情