【Java入门+万年历】0基础学习java-Day1

引言:

首先会先将代码+再介绍小项目

今天我将带大家学习一个完整的Java日历程序,这个程序可以接收用户输入的年月日,计算该月份的天数,确定该月1号是星期几,并打印出完整的月历。通过这个例子,你将学习到Java的基础语法、条件判断、循环结构以及基本的日期计算。

程序功能概述

这个Java程序主要实现以下功能:

  1. 接收用户输入的年、月、日

  2. 计算输入月份的天数

  3. 计算该月1号是星期几

  4. 打印完整的月历

代码解析

1. 包声明和导入

package com.fll.wwww.demo1;
import java.util.Scanner;

package   声明了代码所属的包,包名就叫com.fll.www.demo1   (这个部分大家可以自己命名)

import java.util.Scanner;  Scanner类属于java.util包  用于接收用户输入。

2. 主类和主方法

public class Demo {
    public static void main(String[] args) {
        // 程序主体
    }
}

 定义了一个公共类叫Demo 其中class是一个类 public的意思是公有的

main方法是java程序的入口点。

 3. 接收用户输入

System.out.print("请输入年份:");
Scanner input = new Scanner(System.in);
int year = input.nextInt();
System.out.print("请输入月份:");
int month = input.nextInt();
System.out.print("请输入日期:");
int day = input.nextInt();

 其中System.out.print(""); 是 Java 中用于向控制台输出文本的基础方法之一。它不会自动换行,适合在同一行连续输出内容。

 使用Scanner类从控制台读取用户输入的年份,月份和日期。

nextInt()方法读取整数输入。

4. 计算月份天数

int days = 0;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
    days = 31;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
    days = 30;
} else if (month == 2) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
        days = 29;
    } else {
        days = 28;
    }
}

1. 使用条件判断确定每个月的天数

2.对于2月,需要判断是否为闰年:

        能被4整除但不能被100整除,或者能被400整除的年份是闰年。

=   一个等号是赋值。 ==   两个等号才是等于  

其中 有if语句 和 ||

if语句 

if-else if-else if-else 

if语句后面写的是满足条件 : 如果满足就执行下面的语句

如果不满足就执行下面的 else if里面的条件是否满足,不满足继续执行下面的语句,以此类推。

 ||

这个等于"或"

5. 计算1号是星期几

// 计算1900年到输入年份的总天数
int yearNum = 0;
for (int i = 1900; i < year; i++) {
    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
        yearNum += 366;
    } else {
        yearNum += 365;
    }
}

// 计算1月到输入月份前一个月的总天数
int monthNum = 0;
for (int j = 1; j < month; j++) {
    // 类似前面的月份天数计算
}

// 计算星期几
int week = (yearNum + monthNum + 1) % 7;
if (week == 0) {
    week = 7;
}

 有一个默认 1900年 1月1号 是星期一(做题的条件)

1.我们需要计算从1900年开始累计到输入年份的总天数

2.累计输入年份1月到输入月份前一个月的总天数

3.通过总天数计算每个月的1号是星期几?

这个部分涉及到for循环 += %

for循环语句

for (初始表达式; 条件判断; 迭代因子) {
          循环体;
}

  (1) 首先看初始表达式

  (2) 查看是否满足循环条件

  (3) 如果满足条件, 就执行循环体

  (4)最后再执行迭代因子 

以上操作重复到不满足循环条件为止。

+=

举个简单的例子 

a+=b;   等于 a=a+b;

%

取模 

8%7=1, 9%7=2, 10%7=3;

6. 打印月历

System.out.println(year + "年" + month + "月\t\t\t ^ v");
System.out.println("一\t二\t三\t四\t五\t六\t七\t");

// 打印空格对齐1号的位置
for (int i = 1; i <= week - 1; i++) {
    System.out.print("\t");
}

// 打印日期
for (int i = 1; i <= days; i++) {
    System.out.print(i + "\t");
    if ((week - 1 + i) % 7 == 0) {
        System.out.println();
    }
}

打印月历标题

先打印空格使1号对齐到正确的星期位置

按星期格式打印所有日期,每到星期日就换行。

7.完整代码

package com.jr.www.demo1;

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        //1.接收年和月
        System.out.print("请输入年份:");
        Scanner input = new Scanner(System.in);
        int year = input.nextInt();
        System.out.print("请输入月份:");
        int month = input.nextInt();
        System.out.print("请输入日期:");
        int day = input.nextInt();
        //2.计算输入的月份有多少天
        int days = 0;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            days = 31;
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            days = 30;
        } else if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                days = 29;
            }
        } else {
            days = 28;
        }
        System.out.println(year + "年" + month + "月有" + days + "天");

        //3.计算输入的月份. 1号是星期几?
        //3-1 求输入的年份距离1900年有多少天
        int yearNum = 0;
        for (int i = 1900; i < year; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                yearNum += 366;
            } else {
                yearNum += 365;
            }
        }
        //3.2 求整月的天数差?
        int monthNum = 0;
        for (int j = 1; j < month; j++) {
            if (j == 1 || j == 3 || j == 5 || j == 7 || j == 8 || j == 10 || j == 12) {
                monthNum += 31;
            } else if (j == 4 || j == 6 || j == 9 || j == 11) {
                monthNum += 30;
            } else if (j == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    monthNum += 29;
                } else {
                    monthNum += 28;
                }
            }
        }

        //3.3求输入年份,输入月份的1号是星期几?
        int week = (yearNum + monthNum + 1) % 7;

        if (week == 0) {
            week = 7;
        }
        System.out.println(year+"年"+month+"月"+day+"日是星期"+week);
        //4.打印日历
        System.out.println(year + "年" + month + "月\t\t\t ^ v");
        System.out.println("一\t二\t三\t四\t五\t六\t七\t");


        //先打印空格: 将1号挤到相应的位置
        for (int i = 1; i <= week - 1; i++) {
            System.out.print("\t");
        }

        for (int i = 1; i <= days; i++) {
            System.out.print(i + "\t");
            if ((week - 1 + i) % 7 == 0) {
                System.out.println();
            }
        }

    }
}

8. 学习要点:

1.Java基本输入输出

2.条件判断语句(if-else)

3.循环结构(for)

4.日期计算逻辑

5.基本的格式化输出

9.扩展思考:

你可以尝试改进这个程序:

1.增加输入验证,确保输入的年月日有效

2.添加功能显示当前日期

3.实现前后月份导航功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值