package API; import java.time.DayOfWeek; import java.time.LocalDate; import java.util.Scanner; public class CalendarPrinter{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入年份:"); int year = scanner.nextInt(); System.out.print("请输入月份(1~12):"); int month = scanner.nextInt(); LocalDate date = LocalDate.of(year, month, 1); DayOfWeek firstDayOfWeek = date.getDayOfWeek(); int daysInMonth = date.lengthOfMonth(); String[] weekDays = {"日", "一", "二", "三", "四", "五", "六"}; System.out.println("-----------------------------"); System.out.println("**********"+year+"年"+month+"月***********"); System.out.print(" "); for (String day : weekDays) { System.out.printf("%s\t", day); } System.out.println(); int curDay = 1; int column = firstDayOfWeek.getValue(); while (curDay <= daysInMonth) { if (column == 7) { System.out.printf("%d%n", curDay++); column = 1; } else { System.out.printf("%d\t", curDay++); column++; } } while (column <= 7) { System.out.print("\t"); column++; } System.out.println("\n------------------------------"); } }帮我分析这段代码
时间: 2023-07-15 21:14:39 浏览: 119
这段代码实现了一个简单的日历打印功能,根据用户输入的年份和月份,打印出该月份的日历。下面是代码的具体分析:
1. 导入了java.time.DayOfWeek和java.time.LocalDate两个类,分别用来获取日期对应的星期和计算日期的长度。
2. 在main方法中,首先创建一个Scanner对象,用来读取用户输入的年份和月份。
3. 调用LocalDate.of方法创建一个LocalDate对象,表示用户输入的年份和月份的第一天。
4. 获取该日期对应的星期,即该月份的第一天是星期几。
5. 获取该月份的天数。
6. 创建一个String数组,用来存储星期的名称。
7. 打印出日历的标题部分,包括年份和月份。
8. 打印出星期的名称。
9. 定义两个变量curDay和column,用来表示当前打印的日期和列数。
10. 使用while循环打印日历的每一行,如果该行已经满了7个日期,则换行,否则继续打印下一个日期。
11. 如果该月份的最后一天不是星期天,需要在最后一行打印一些空格,保证日历的格式正确。
12. 最后打印出日历的结束标记。
总体来说,该代码实现的功能比较简单,是一个很好的练手程序。但是需要注意的是,该代码没有对用户输入的年份和月份进行检查,如果用户输入了无效的数据,程序可能会出现异常。
相关问题
/* 输入某小孩的日期,计算他百天的日期及星期几。 请在下面标注【】的位置填写代码 */ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Scanner; public class After100Days { public static void main(String[] args) { //输入指定的日期:年、月、日 int year,month,day; 【】 // 用输入的日期 创建LocalDate类型的日期对象date 【】 //计算100天后的日期 【】 //输出结果 【】 } }
```java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class After100Days {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//输入指定的日期:年、月、日
System.out.println("请输入指定的日期(格式: yyyy-MM-dd):");
String inputDateStr = scanner.next();
// 用输入的日期 创建LocalDate类型的日期对象date
LocalDate date = LocalDate.parse(inputDateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//计算100天后的日期
LocalDate newDate = date.plusDays(100);
//输出结果
System.out.println("100天后的日期:" + newDate);
System.out.println("100天后的星期:" + newDate.getDayOfWeek().getValue());
}
}
```
运行结果如下:
```
请输入指定的日期(格式: yyyy-MM-dd):
2021-11-22
100天后的日期:2022-03-02
100天后的星期:3
```
其中,`LocalDate`类是Java 8中的日期类,`LocalDate.parse()`方法可以将字符串转换为`LocalDate`类型的日期对象,`plusDays()`方法可以对日期进行加减运算。`getDayOfWeek()`方法可以获取星期几,返回值为一个枚举类型`DayOfWeek`。
输入一行,空格分隔的字符s和整数n,字符s是英文的星期几,整数n是与今天相差的天数。 输出 指定天数的星期几英文。 测试说明 平台会对你编写的代码进行测试: 测试输入:Monday 2 预期输出:Wednesday补全Java代码package module6; import java.util.Scanner; public class Test60 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s; int n; /********** Begin *********/ s=scanner.next(); n=scanner.nextInt(); /********** End *********/ } }
以下是补全后的Java代码:
```java
package module6;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Scanner;
public class Test60 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s;
int n;
/********** Begin *********/
s = scanner.next();
n = scanner.nextInt();
LocalDate date = LocalDate.now();
// 将输入的星期几转换为DayOfWeek枚举类型
DayOfWeek dayOfWeek = DayOfWeek.valueOf(s.toUpperCase());
// 指定天数后的日期
LocalDate newDate = date.plusDays(n);
// 获取指定日期的星期几
DayOfWeek newDayOfWeek = newDate.getDayOfWeek();
// 计算两个星期几之间的差距,得到相差的天数
int diff = newDayOfWeek.getValue() - dayOfWeek.getValue();
if (diff < 0) {
diff += 7;
}
// 输出指定天数的星期几英文
System.out.println(dayOfWeek.plus(diff).name());
/********** End *********/
}
}
```
该程序与之前提供的Java代码类似,不同之处在于将输入的字符s和整数n存储到对应的变量中,并在补全部分的代码中进行操作。
阅读全文