【问题标题】:Calendar formatting in javajava中的日历格式
【发布时间】:2019-09-08 01:59:40
【问题描述】:

我正在尝试制作日历,这部分代码应该打印日期。
现在,当日历完成时,行“|”停在最后一天。
31 旁边的框应该有一行。
这是我目前所拥有的。

    System.out.println("+-----------------------------------------+");
    System.out.println("|               " + months[month] + " " + year + "             |");
    System.out.println("+-----------------------------------------+");
    System.out.println("| Sun | Mon | Tue | Wed | Thu | Fri | Sat |");
    System.out.println("+-----------------------------------------+");

    int d = day(month, 1, year);

    // printing the days
    for (int i = 0; i < d; i++)
    System.out.print("|     ");
    for (int i = 1; i <= days[month]; i++) {
       System.out.printf("|   %2d", i);

        if (((i + d) % 7 == 0) || (i == days[month])) System.out.println("|" + "\n" + "|     |     |     |     |     |     |     |" + "\n" + "+-----+-----+-----+-----+-----+-----+-----+");

    }

}

}

Expected Output (Bottom part)

+-----+-----+-----+-----+-----+-----+-----+
|  26 |  27 |  28 |  29 |  30 |  31 |     |
|     |     |     |     |     |     |     |
+-----+-----+-----+-----+-----+-----+-----+

Actual Output (Bottom part)


+-----+-----+-----+-----+-----+-----+-----+
|   26|   27|   28|   29|   30|   31|
|     |     |     |     |     |     |     |
+-----+-----+-----+-----+-----+-----+-----+

【问题讨论】:

    标签: java calendar monthcalendar


    【解决方案1】:

    没有测试,但将 System.out.println() 更改为 System.out.print() 应该可以解决问题。像这样:

    for (int i = 1; i <= days[month]; i++) {
       System.out.printf("|   %2d", i);
    
       if (((i + d) % 7 == 0) || (i == days[month])) System.out.print("|" + "\n" + "|     |     |     |     |     |     |     |" + "\n" + "+-----+-----+-----+-----+-----+-----+-----+");
    }
    

    【讨论】:

    • 如果我这样做,数字在框外 "+-----+-----+-----+-----+----- +-----+-----+|26|27|28|29|30|31|"
    【解决方案2】:

    您有一个单独的 for 循环,用于在月初之前打印空单元格。这样可行。您需要的是一个类似的单独的 for 循环,该循环在该月的最后一天之后打印空单元格。

    为了在您的主 for 循环之后正常工作,您首先需要将底部水平线的打印从循环中取出。所以循环中的if 语句就变成了if ((i + d) % 7 == 0)。

    现在在您的主要for 循环之后插入一个新的for 循环以打印适当数量的空单元格。您需要找到该月最后一天(或者更简单,下个月第一天)的星期几来确定它们有多少。

    最后使用与if 语句相同的打印语句绘制底部水平线。您可以将此语句包装到一个方法中,以便在两个地方都可以使用它。

    每月的最后一天是星期日是一种特殊情况。在这种情况下,您的简化 if 语句仍将画线,您不应在最后再次画线。你会找到管理的方法。

    【讨论】:

    • 我尝试了几个 for 循环,但我不确定如何计算当月最后一天之后的空单元格。它要么打印框外的单元格,要么打印框下方的单元格。
    • 很抱歉,@Jake。我不知道我能说什么。 Stack Overflow 不太适合远程调试。
    • 删除绒毛的编辑are fine。请不要进一步回滚。
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2011-07-10
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多