[英]How to print values from an array in a calendar format?
所以我有两个月的数组来存储事件的时间,日期和优先级:
Events[] september= new Events[30];
Events[] october = new Events[31];
我想将我的days数组插入其中,并使它们以特定格式显示。
static String[] days = {"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"};
我如何获得这样的输出? 我似乎找不到自己的出路:
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
我为此写了两个不同的代码,我的代码是:
public static void DisplayEvents(Events[] event,int firstWeekday) {
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
for(int i =0; i<days.length;i++) {
System.out.println(String.format("%1$5s", days[i]) +"");
}
和
public static void DisplayEvents(Events[] event,int firstWeekday) {
int weekDayIndex =0;
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
for(int day=1; day<days.length; day++){
System.out.println(" ");
weekDayIndex++;
}
for(int day =1; day<event.length;day++){
System.out.print(String.format("%1$5s", day));
weekDayIndex++;
if (weekDayIndex== 7){
weekDayIndex = 0;
System.out.println();
} else {
System.out.println("");
}
}
}
这些代码输出给我的是:
更新的输出:
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
星号表示发生事件的日期。 我已经写了一个代码来放入随机事件,并且有星号。 我的问题是仅以日历格式打印它,并且能够在发生事件的日期放置星号。 任何贡献/帮助将不胜感激。 如果需要,我可以提供更多信息。
在这条线
System.out.println(String.format("%1$5s", day));
使用print()
而不是println()
。
从概念上讲,您希望将每一行构建为单个String
或输出,并在打印新行之前填充所有列。
“主要”原因是使用System.out.println(String.format("%1$5s", day));
在您的for(int day =1; day<event.length;day++){
循环中,该循环每天在新行上打印出来。
现在,您可以通过多种方法来实现此目标,例如,可以使用System.out.print
代替System.out.println
,也可以使用所有7天的预定义格式( "%2s%1s %2s%1s %2s%1s %2s%1s %2s%1s %2s%1s %2s%1s"
)并填写
或者,您可以使用诸如StringBuilder
东西,它可以代表一行,生成给定日期的输出并将其附加到StringBuilder
,例如...
LocalDate date = LocalDate.of(2015, Month.OCTOBER, 1);
int month = date.getMonthValue();
LocalDate endOfMonth = date.withDayOfMonth(date.lengthOfMonth()).plusDays(1);
while (date.getDayOfWeek() != DayOfWeek.SUNDAY) {
date = date.minusDays(1);
}
String format = "%2s%1s ";
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
while (date.isBefore(endOfMonth)) {
StringBuilder row = new StringBuilder(7 * 4);
for (int index = 0; index < 7; index++) {
if (month == date.getMonthValue()) {
row.append(String.format(format, Integer.toString(date.getDayOfMonth()), ""));
} else {
row.append(String.format(format, "", ""));
}
date = date.plusDays(1);
}
System.out.println(row);
}
哪个打印...。
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
而且因为11月我真是个蠢货...
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
现在,显然,我没有实现您的“事件”逻辑,但是我以它的格式保留了空格(在示例中我将其留为空白)
您可以正确打印标题。 下一步打印出空格。
int currentWeekDay = 0;
for(int i = 0; i<firstWeekDay; i++){
System.out.print(" ");
currentWeekDay++;
//just in case the firstWeekDay is invalid.
if(currentWeekDay==7){
currentWeekDay=0;
System.out.println();
}
}
现在打印出数字并每次都添加一份硬性报酬。
for(int i = 0; i<event.length; i++){
System.out.printf("%4s", event[i]);
currentWeekDay++;
if(currentWeekDay==7){
currentWeekDay=0;
System.out.println();
}
}
请注意,我使用的是创建的字符串的days数组,而不是格式化要遍历的索引。
public static void DisplayEvents(Events[] event, int firstWeekday) {
int weekDayIndex =0;
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
System.out.print("1");
weekDayIndex++;
for(int day = 2; day < event.length;day++){
if(weekDayIndex== 7){
weekDayIndex = 0;
System.out.println();
System.out.print(day);
weekDayIndex++;
} else {
System.out.print(String.format("%1$4s", day));
weekDayIndex++;
}
}
}
它打印:
周日,周二,周三,周四,周五,周六
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.