
Java如何判断三年是否连续
用户关注问题
我有三个年份数据,需要判断它们是否构成连续的三年,例如2018、2019、2020。如何在Java中实现这个功能?
使用排序和比较年份差判断连续性
可以先将三个年份存入一个数组或集合,使用Arrays.sort()方法对它们进行排序。排序后,判断排序后的三个年份是否满足第二年减第一年等于1,第三年减第二年也等于1。若两个差均为1,则这三个年份是连续的。示例代码:
int[] years = {year1, year2, year3};
Arrays.sort(years);
boolean isContinuous = (years[1] - years[0] == 1) && (years[2] - years[1] == 1);
用户输入的三个年份顺序可能混乱,Java程序怎样保证无论输入顺序如何,都能正确判断这三年是否连续?
通过对年份数组排序确保顺序正确
不论输入顺序如何,先将三个年份放入数组,然后对数组进行排序。排序之后,年份顺序固定,接着比较相邻年份的差值是否为1,这样就保证判断的准确性。排序可以使用Arrays.sort方法,代码示例:
int[] years = {y1, y2, y3};
Arrays.sort(years);
boolean continuous = (years[1] - years[0] == 1) && (years[2] - years[1] == 1);
如果输入的三个年份中有重复,比如2019、2019、2020,怎么在Java中判断它们不是连续的三年?
利用Set去重后判断元素数量和差值
首先可以将三个年份添加到Set集合中去重。如果去重后元素数量不足3,则说明有重复年份,不能算作连续的三年。如果数量是3,则排序后判断差值是否都为1。示例代码:
Set yearSet = new HashSet<>(Arrays.asList(y1, y2, y3));
if (yearSet.size() != 3) {
// 存在重复年份,不连续
} else {
int[] arr = yearSet.stream().mapToInt(Integer::intValue).toArray();
Arrays.sort(arr);
boolean isContinuous = (arr[1] - arr[0] == 1) && (arr[2] - arr[1] == 1);
}