[java编程题]打印指定年指定月份的日历

做了一个小的日历打印,没有使用数组,所以不能对日期进行操作,用了单个for循环打印,对初学者来说应该好理解点

工具类:

import java.util.Calendar;

public class DaysTool {
    private int year;
    private int month;
    public DaysTool(){}
    public DaysTool(int year ,int month){
        this.year = year;
        this.month = month;
    }

    /**
     * 根据年份和月份来得到打印月份的第一天是周几
     * @return 是一周的周几
     */
    public int WhatWeekDay(){

        //创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置calendar对象的年
        calendar.set(Calendar.YEAR,this.year);
        //设置calendar对象的月份 ,因为此处的月份是从零开始(0-11表示1-12月),所以我们输入的数值要减去1才是正确的月份
        //(比如输入8月,接收数值 8 ,但是因为Calendar的特殊月份计数, 8 代表的是"9月",所以减去 1 为 7 ,才是正确的 8月)
        calendar.set(Calendar.MONTH,this.month-1);
        //设置日期为打印月的第一天
        calendar.set(Calendar.DATE, 1);
        //用get方法获取这一天是周几
        int whatDay = calendar.get(Calendar.DAY_OF_WEEK);
        //Calendar从周日开始到周六结束,用1-7表示,这里为了方便,把其数值减 1 ,得到周日到周六为 0 - 6 只需特殊处理周日即可
        return whatDay-1;   //得出这个月的第一天是周几
    }

    public int WhatDayOfMonth(){
        //实例化Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置为打印年打印月的下一个月(参考WhatWeekDay方法中的月份注释 ,这里没减1)第一天.
        //例:输入 2018 2 其实为2018年的3月
        calendar.set(this.year,this.month,1);
        //使上面的日期退一天 得到打印月
        calendar.add(Calendar.DATE,-1);
        //获取日的数值
        int monthDay =calendar.get(Calendar.DATE);
        return monthDay;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMouth() {
        return month;
    }

    public void setMouth(int mouth) {
        this.month = mouth;
    }
}

主类(包含了打印工具类)

import java.util.Scanner;

public class PrintCalendar {
    public static void main(String[] args) {
        //接收键盘录入年份和月份
        Scanner scanner =  new Scanner(System.in);
        System.out.print("请输入需要打印的年份: ");
        int year = scanner.nextInt();
        System.out.print("请输入需要打印的月份: ");
        int month = scanner.nextInt();
        //创建日历工具类对象,并用带参构造初始化
        DaysTool dt = new DaysTool(year,month);
        //实例化打印工具类对象
        PrintDayTool pd = new PrintDayTool();
        System.out.println(String.format("\n即将打印%d年%d月日历",year,month)+"\n");
        System.out.println("========================================================\n");
        //调用打印工具类对象的printDay方法,传入年和月份
        pd.printDay(dt.WhatDayOfMonth(),dt.WhatWeekDay());
        System.out.println("========================================================");
    }

}
class PrintDayTool{
    //
    /**
     * 打印日历方法,
     * @param daysOfMouth 传入参数,确定打印月份的天数
     * @param whatDay 传入参数,确定打印月份的第一天是周几
     */
    public void printDay(int daysOfMouth,int whatDay){
        int count = 0; //定制计数标记
        System.out.print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        //j从1开始 到这个月的天数结束
        for(int j = 1 ; j <= daysOfMouth ; j ++){
            count++;
            //每打印七天就换行
            if(count % 7 == 1){
                System.out.print("\n\n");
            }
            //如果这月的第一天是周日就把它置为0 不打印额外制表符
            if(whatDay==7)
                whatDay = 0;
            //这个月的第一天是周几就额外打印几次制表符
            while (whatDay>0){
                System.out.print("\t\t");
                whatDay--;
                count++;
            }
            //打印天数
            System.out.print(j+"\t\t");
        }
        //打印完日历换行
        System.out.println("\n");
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔城就是个弟弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值