Java 基于用户输入的日历打印有问题
这就是我得到的Java 基于用户输入的日历打印有问题,java,Java,这就是我得到的 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 checkLeapYear()不工作 打印格式 您需要的是与UNIX中的命令类似的东西。 你在问题中发布的代码完全符合它的要求。您编写代码的方式使其不会产生所需的输出。例如,当您应该调用方法print()或p
S M Tu W Th F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
checkLeapYear()
不工作您需要的是与UNIX中的命令类似的东西。
你在问题中发布的代码完全符合它的要求。您编写代码的方式使其不会产生所需的输出。例如,当您应该调用方法
print()
或printf()
时,您调用了方法
假设可以使用,则不需要计算年份是否为闰年,也不需要计算月份中要显示的天数。date-time API还可以为您提供月份名称和一周中的天数名称,还可以告诉您一周中的哪一天对应于某个日期
下面是对PrintCalendarV1
类的重写,我将其重命名为PrintCalendarV2
,并使用了日期时间API。我希望它对你有用。请注意,下面的代码接受程序参数,而不是要求用户输入程序运行的月份和年份。有关方法main()
,请参见下面代码中的注释
import java.time.LocalDate;
导入java.time.Month;
导入java.time.Year;
导入java.time.YearMonth;
导入java.util.Collections;
/**
*[UNIX]cal命令的实现。
*
*@见PrintCalendarV1
*/
公共类PrintCalendarV2{
专用静态无效打印日历(整数月、整数年){
如果(!isValidMonth(aMonth)){
抛出新的IllegalArgumentException(“无效月份:+aMonth”);
}
如果(!Isvalidear(aYear)){
抛出新的IllegalArgumentException(“无效年份:+aYear”);
}
//数组索引0(零)等于一月,因此需要从'aMonth'中减去1(一)。
Month monthName=Month.values()[aMonth-1];
字符串标题=String.format(“%s%d%n”,月名,年);
int len=heading.length();
int diff=20-透镜;
整数计数=diff/2+1;
String indent=String.join(“,Collections.nCopies(count)”);
系统输出打印(缩进+标题);
System.out.println(“Su-Mo-Tu-We-Th-Fr-Sa”);
int dayOfMonth=1;
LocalDate theDate=LocalDate.of(一年、一个月、一个月);
YearMonth yrMnth=年月日(一年,一个月);
int monthDays=yrMnth.lengthOfMonth();
//星期一=1和星期日=7,但是方法“ordinal()”将在星期一返回零。
int weekDay=Date.getDayOfWeek().ordinal()+1;
如果(工作日==7){
工作日=0;
}
对于(int i=0;i<工作日;i++){
系统输出打印(“”);
}
System.out.printf(“%2d”,月日);
如果(工作日<6){
系统输出打印(“”);
}
工作日++;
对于(;工作日<6;工作日++){
System.out.printf(“%2d”,每月++天);
}
++月日;
如果(工作日<7){
System.out.printf(“%2d”,月日);
++月日;
}
System.out.println();
虽然(dayOfMonth如果您遵循java命名约定,这将更容易阅读。类以大写字母开头:变量和方法以小写字母开头。这段代码是您从尝试用于类项目的某个地方下载的吗?它以明显的println语句的方式打印周数。您可以使用java为你做所有的计算。你需要做的就是格式化输出。你不允许使用日期时间API吗?谢谢你,先生。我理解格式化的事情。以及日期时间API的用法。但是我不允许使用它,
S M Tu W Th F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
SUN MON TUE WED THU FRI SAT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SEPTEMBER 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30