Java 月历的数据结构是什么
我有一本教科书上的代码来打印日历的月份。它会打印月份第一天之前所有天的空白,但不会打印月份最后一天之后的空白。虽然代码工作正常,但问题是很难用自动化测试它,并且在不破坏它的情况下进行任何更新 我想使这段代码易于测试。我想将日历月移动到类似于表的数据结构中,将打印逻辑移动到单独的方法中。也就是说,将数据和格式分开 除了2d数组或自定义类之外,我还可以使用哪个数据结构/D来表示表?我更喜欢已经包含在Java中的DS,或者来自流行且维护良好的库。理想情况下,DS应该允许我(1)获取日期发生的日期(直接,而不是通过顺序迭代)和(2)获取任何行并对其进行迭代 我无法从他那里得到答案。我宁愿不使用实用方法创建自己的DS,除非别无选择。请告知Java 月历的数据结构是什么,java,Java,我有一本教科书上的代码来打印日历的月份。它会打印月份第一天之前所有天的空白,但不会打印月份最后一天之后的空白。虽然代码工作正常,但问题是很难用自动化测试它,并且在不破坏它的情况下进行任何更新 我想使这段代码易于测试。我想将日历月移动到类似于表的数据结构中,将打印逻辑移动到单独的方法中。也就是说,将数据和格式分开 除了2d数组或自定义类之外,我还可以使用哪个数据结构/D来表示表?我更喜欢已经包含在Java中的DS,或者来自流行且维护良好的库。理想情况下,DS应该允许我(1)获取日期发生的日期(直接
Mon Tue Wed Thu Fri Sat Sun
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
守则:
import java.time.DayOfWeek;
import java.time.LocalDate;
//TODO : Add tests.
public class Calendar {
public static void main(String[] args) {
printCalendar(3, 2020);
}
public static void printCalendar(int month, int year) {
LocalDate date = LocalDate.of(year, month, 1);
System.out.println(" Mon Tue Wed Thu Fri Sat Sun");
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue(); // 1 = Monday, ... 7 = Sunday
for (int i = 1; i < value; i++) {
System.out.print(" ");
}
while (date.getMonthValue() == month) {
System.out.printf("%4d", date.getDayOfMonth());
date = date.plusDays(1);
if (date.getDayOfWeek().getValue() == 1) {
System.out.println();
}
}
if (date.getDayOfWeek().getValue() != 1) {
System.out.println();
}
}
//TESTS (for now)
/*
1 - Calendar should have exactly 7 columns.
2 - Header/top row should always be from Mon to Sun.
3 - 1st & last days of month should be in correct place.
4 - All days before 1st day of month should be empty.
*/
}
import java.time.DayOfWeek;
导入java.time.LocalDate;
//TODO:添加测试。
公课日历{
公共静态void main(字符串[]args){
印刷日历(2020年3月);
}
公共静态无效打印日历(整数月,整数年){
LocalDate=LocalDate.of(年、月、1);
System.out.println(“周一周二周三周四周五周六周日”);
DayOfWeek weekday=date.getDayOfWeek();
int value=weekday.getValue();//1=Monday,…7=Sunday
for(int i=1;i
我忘了使用java.time
类进行渲染
试着这样做:
参加日
课程:
class Day {
int number;
String render() {
return number == 0 ? " " : String.format("%4d", number);
}
}
class Week {
List<Day> days;
String render() {
return days.stream().map(Day::render).collect(Collectors.joining(""));
}
}
class Month {
List<Week> weeks;
String render() {
return weeks.stream().map(Day::render).collect(
Collectors.joining("\n", " Mon Tue Wed Thu Fri Sat Sun", "\n")
);
}
}
和周
课程:
class Day {
int number;
String render() {
return number == 0 ? " " : String.format("%4d", number);
}
}
class Week {
List<Day> days;
String render() {
return days.stream().map(Day::render).collect(Collectors.joining(""));
}
}
class Month {
List<Week> weeks;
String render() {
return weeks.stream().map(Day::render).collect(
Collectors.joining("\n", " Mon Tue Wed Thu Fri Sat Sun", "\n")
);
}
}
对于“空白”日,不要给指定号码。把你的日子积攒成几周,把几周积攒成一个月,然后:
System.out.println(month.render());
那么31个元素的数组呢?它非常具体,几乎肯定不存在。