引言:
首先会先将代码+再介绍小项目
今天我将带大家学习一个完整的Java日历程序,这个程序可以接收用户输入的年月日,计算该月份的天数,确定该月1号是星期几,并打印出完整的月历。通过这个例子,你将学习到Java的基础语法、条件判断、循环结构以及基本的日期计算。
程序功能概述
这个Java程序主要实现以下功能:
-
接收用户输入的年、月、日
-
计算输入月份的天数
-
计算该月1号是星期几
-
打印完整的月历
代码解析
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();
}
}
}
}

551

被折叠的 条评论
为什么被折叠?



