繁体   English   中英

如何以日历格式从数组中打印值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM