请参阅此链接中的示例检查两年之间的闰年
public class LeapYears {
public static void main(String[] args) {
GregorianCalendar cal = new GregorianCalendar();
System.out.println("Leap years between 1975 and 2015:");
for (int year = 1975; year < 2015; year++) {
if (cal.isLeapYear(year)) {
System.out.println(year);
}
}
}
}
java.time
java.util
日期-时间API已过时,并且正在生成错误。建议完全停止使用,并切换到现代日期时间API*。
- 您可以使用
java.time.Year#isLeap
检查年份是否为闰年 - 为了进行测试,您可以使用
Scanner
类从键盘获取输入
演示:
import java.time.Year;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the first year: ");
int first = scanner.nextInt();
System.out.print("Enter the last year: ");
int last = scanner.nextInt();
System.out.println("Leap years between 1975 and 2015:");
for (int year = first; year <= last; year++) {
if (Year.of(year).isLeap()) {
System.out.println(year);
}
}
}
}
样本运行:
Enter the first year: 1975
Enter the last year: 2012
Leap years between 1975 and 2015:
1976
1980
1984
1988
1992
1996
2000
2004
2008
2012
从跟踪:日期时间了解有关现代日期时间API的更多信息。
*出于任何原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen Backport将Java.time的大部分功能向后移植到Java 6&7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API
请注意,我已经使用Streams编写了这个程序,并尝试使用filter中的逻辑。我希望这个节目不要太复杂。
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.IntStream;
import java.util.stream.Collectors;
class Solution {
static IntStream createYearStream(LocalDateTime from, LocalDateTime to) {
int yearStart= LocalDateTime.from(from).getYear();
int yearEnd=LocalDateTime.from(to).getYear();
//TODO - Create years stream
return IntStream.range(yearStart,yearEnd);
}
static List<Integer> getAllLeapYear(IntStream yearRange) {
List<Integer> leapYears = new ArrayList<Integer>();
leapYears= yearRange.filter(x->(x%4==0||(x%100==0&&x%400==0) )).boxed().collect(Collectors.toList());
return leapYears;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String from = sc.next();//From Year
String to = sc.next(); //To Year
LocalDateTime fromDate = LocalDateTime.parse(from);
LocalDateTime toDate = LocalDateTime.parse(to);
List<Integer> leapYears = getAllLeapYear(createYearStream(fromDate, toDate));
System.out.println(leapYears.size());
}
}