蓝桥杯JAVA版答案——历年真题——日期问题

更多JAVA版答案移步我的博客:蓝桥杯JAVA版答案汇总

本题考查

本题可以使用JAVA的date类进行求解(法一),也可以编写判断逻辑进行判断(法二)

思路

法一:调用java的date类尝试将字符串转换为日期,若转化不成功则有catch语句获取错误,若成功加入列表。最后列表排序,再用一个日期格式化器将日期格式化为“yyyy-MM-dd”格式。注意:format.setLenient(false)一定要有,否则格式化器将对日期格式进行宽松处理,会出现错误。
法二:分别将三种可能性传入判断函数进行判断
判断函数逻辑

  1. 若二位年份大于等于60,则年份为1900+二位年份;否则为2000+二位年份
  2. 判断年份是否为闰年,若是二月有29天,否则二月有28天
  3. 判断月份是否大于0小于等于12,判断日期是否大于0小于等于对应月份天数,若两条件皆满足,则判断列表内是否有该日期,若没有则加入列表,若有则结束该函数
  4. 当所有情况判断完毕后,对列表进行排序,输出

AC代码

两段代码皆AC,调用方法可能比编写逻辑执行要快一点
法一:

import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner scaner = new Scanner(System.in);
		String[] strs = scaner.nextLine().split("/");
		scaner.close();
		LinkedList<Date> list = new LinkedList<Date>();
		String date_str = strs[0]+"-"+strs[1]+"-"+strs[2];
		try {
			SimpleDateFormat format=new SimpleDateFormat("yy-MM-dd");
			format.setLenient(false);
			Date date = format.parse(date_str);
			list.add(date);
		} catch (Exception ex) {}
		try {
			SimpleDateFormat format=new SimpleDateFormat("MM-dd-yy");
			format.setLenient(false);
			Date date = format.parse(date_str);
			if(!list.contains(date))	list.add(date);
		} catch (Exception ex) {}
		try {
			SimpleDateFormat format=new SimpleDateFormat("dd-MM-yy");
			format.setLenient(false);
			Date date = format.parse(date_str);
			if(!list.contains(date))	list.add(date);
		} catch (Exception ex) {}
		Collections.sort(list);
		for(Date d:list) {
			SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
			format.setLenient(false);
			System.out.println(format.format(d));
		}
	}
}

法二:

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
	static LinkedList<String> list;
	static boolean isLeapYear(int year) {
		if((year%4==0&&year%100!=0)||year%400==0)	return true;
		else										return false;
	}
	static void check(int aa, int bb, int cc) {
		int[] days = new int[] {31,0,31,30,31,30,31,31,30,31,30,31};
		if(aa>=60)	aa+=1900;
		else		aa+=2000;
		if(isLeapYear(aa))	days[1]=29;
		else				days[1]=28;
		String str = aa+"-"+String.format("%02d", bb)+"-"+String.format("%02d", cc);
		if(bb>0&&bb<=12&&cc>0&&cc<=days[bb-1]&&!list.contains(str))
			list.add(str);
	}

	public static void main(String[] args) {
		Scanner scaner = new Scanner(System.in);
		String[] strs = scaner.nextLine().split("/");
		int aa=Integer.parseInt(strs[0]);
		int bb=Integer.parseInt(strs[1]);
		int cc=Integer.parseInt(strs[2]);
		list=new LinkedList<String>();
		scaner.close();
		check(aa, bb, cc);
		check(cc, aa, bb);
		check(cc, bb, aa);
		Collections.sort(list);
		for(String s:list)	System.out.println(s);
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值