java生成工作日历算法_[蓝桥杯][算法提高VIP]任意年月日历输出-题解(Java代码)

# 我的解法比较偷懒,利用java自带的util包

# GregorianCalendar日历类

对于输出年月日历这样的题,我这样的小白一看就头蒙,无从下手。

如果从题目中的日期推向结果,那是大佬的作风,也是出题人的初心。

**如果不想去绞尽脑汁的编写算法,但是又想把这道题完成,就看看下面简单易懂的解法。**

分析一下题目,输出任意一个日历,其实关键难点是一个月的第一天是星期几:

##### get(Calendar.DAY_OF_WEEK);返回的是一个月的第一天

,有了这个点,其他的都不在是问题。像什么闰年、一个月有几天这样的问题小学老师都教过了,很简单。如果这个也不想费力气,还有:

##### getActualMaximum(Calendar.DAY_OF_MONTH);返回一个月的天数

剩下的工作就是一个for循环排列一下天数。

具体日历类怎么用,百度一下,有很多大佬讲解。附的代码可直接过。

import java.util.Scanner;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class Main {

public static void main(String[] args) {

Scanner sn = new Scanner(System.in);

int year = sn.nextInt();

if (year < 2007)

return;

int month = sn.nextInt();

System.out.println("---------------------");

System.out.println(" Su Mo Tu We Th Fr Sa");

System.out.println("---------------------");

int i;

GregorianCalendar cal = new GregorianCalendar(year, month - 1, 1);// 对年份,月份,以及第一天来创建对象

int totalDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取该月份的天数

int startDay = cal.get(Calendar.DAY_OF_WEEK) - 1;// 获取该月的第一天是星期几

for (i = 0; i < startDay; i++)

System.out.print(" ");// 输出第一天前的空格

for (int day = 1; day <= totalDays; day++) {

if (day <= 9) { // 用于输出控制

System.out.print(" " + day);// 依次输出每一天

} else {

System.out.print(" " + day);

}

i++;

if (day < totalDays) {

if (i == 7) { // 每个星期输完换行

System.out.println();

i = 0;

}

} else {

System.out.println();

}

}

System.out.println("---------------------");

}

}

0.0分

2 人评分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值