import java.util.Scanner;
public class Hw2JamesVaughn {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a year: ");
int year = input.nextInt();
if((year < 1582) == (year % 4==0))
System.out.println(year + " is a leap year");
else
System.out.println(year + " is not a leap year");
if((year > 1582) == (year % 100 != 0) || (year % 400 == 0))
System.out.println(year + " is a leap year");
else
System.out.println(year + " is not a leap year");
}
}
这是作业。
(若要确定特定年份是否为闰年,请使用以下逻辑:
- 年份必须能被 4 整除
- 从1582年开始,如果年份能被100整除,也必须能被400整除因此,1700年不是闰年,但2000年是。然而,1500 年是闰年,因为它是在1582年之前,公历的采用年。您的程序将询问一年,然后显示该年份是否为闰年。
我已经通过我的 java 闰年程序走到了这一步,但它不起作用!我一直在研究这个问题,我不知道出了什么问题。
首先,此if((year < 1582) == (year % 4==0))
检查布尔相等性。我想你想要一个if((year < 1582) && (year % 4==0))
但恐怕这仍然不能解决你的逻辑。
我建议你从创建一个方法开始。第一部分应测试year
是否小于 1582。如果是这样,如果它是 4 的倍数,则返回 true。第二部分在维基百科上有很好的描述。把它放在一起会得到类似的东西,
private static boolean isLeapYear(int year) {
if (year < 1582) {
return (year % 4 == 0);
}
/*
* Rest of algorithm from: http://en.wikipedia.org/wiki/Leap_year
*/
if (year % 4 != 0) {
/*
* if (year is not divisible by 4) then (it is a common year)
*/
return false;
} else if (year % 100 != 0) {
/*
* else if (year is not divisible by 100) then (it is a leap year)
*/
return true;
}
/*
* else if (year is not divisible by 400) then (it is a common year)
* else (it is a leap year)
*/
return (year % 400 == 0);
}
然后你可以使用 printf
输出结果,
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a year: ");
int year = input.nextInt();
System.out.printf("%d %s leap year", year, isLeapYear(year) ? "is a"
: "is not a");
}
最后,你的原始代码可以像这样实现——
if (year < 1582 && year % 4 == 0)
System.out.println(year + " is a leap year");
else if (year < 1582)
System.out.println(year + " is not a leap year");
else if (year >= 1582 && (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)))
System.out.println(year + " is a leap year");
else
System.out.println(year + " is not a leap year");
除了算法之外,您还可以使用java内置的日历api计算闰年。
static boolean isLeapYear(int year){
Calendar calendar= Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
return calendar.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}