多易javaSE基础 day6 课程日志 输出日历

今天练习了一个输出日历的项目,学会了localDate类的用法,熟悉了一下类和对象的相关知识.

package day05;

import java.time.LocalDate;
import java.util.Scanner;

/***
 * 输出日历
 * 输入年份和月份 输出日历 给今天加特殊标记*
 */

public class Demo3 {
    public static void main(String[] args) {
        getCal();
    }

    public static void getCal() {

        LocalDate localDate = LocalDate.now();      //调用localDate类
        int nowDay = localDate.getDayOfMonth();     //今天的日,月,年
        int nowMonth = localDate.getMonthValue();
        int nowYear = localDate.getYear();

        Scanner n = new Scanner(System.in);

        while (true) {
            System.out.println();
            System.out.println("请输入要查询的年份:");
            int y = n.nextInt();
            System.out.println("请输入要查询的月份:");
            int m = n.nextInt();


//        LocalDate start = localDate.minusDays(nowDay-1);
            LocalDate start = LocalDate.of(y, m, 1);    //调用localDate类 将这年这月的第一天的localDate对象赋给start
            int day = start.getDayOfMonth();                        //分别从localDate对象中抽取出日,月,年
            int month = start.getMonthValue();
            int year = start.getYear();
//        int week = start.getDayOfWeek().getValue();
            int startWeek = start.getDayOfWeek().getValue();        //取出周
            int hang = 1;       //输出的行数

            System.out.println(" 一\t二\t三\t四\t五\t六\t日");
            a:
            while (true) {
                for (int i = 1; i <= 7; i++) {                  //列数
                    if (i < startWeek && hang == 1) {           //如果是第一行,且列数小于本月第一天的周数 输出空
                        System.out.print("\t");
                        continue;
                    }
                    if (nowYear == year && nowMonth == month && nowDay == day) {    //如果循环到和今天相同的日期,加*
                        if (day < 10) {
                            System.out.print(day + "*\t");
                        } else {
                            System.out.print(day + "*\t");
                        }
                    } else {                            //否则不加
                        if (day < 10) {
                            System.out.print(day + "\t");
                        } else {
                            System.out.print(day + "\t");
                        }
                    }
                    day++;
                    if (day > start.lengthOfMonth()) break a;       //如果日期超过了当前月的最大天数,跳出循环
                    if (i % 7 == 0) System.out.println();       //每7列换一行
                }
                hang++;
            }
        }
    }
}

期间遇到了输出格式对齐的问题.用空格凑了好久才凑齐,后来才发现用\t就行了.\t就是专门用来对齐的.以后可以多用.或者还可以使用printf,用%号分配位置.
今天课程讲到了递归.网上查了一下递归的优缺点,发现递归除了比较容易写之外,没什么优点.说容易写其实也不准确,因为我觉得递归比循环难理解一些.只是遍历二叉树的时候用起来比较方便.平常能不用就不用吧.

猜你喜欢

转载自blog.csdn.net/weixin_44855583/article/details/107673352