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