【问题标题】:Input a year and count its days in java, including leap years在java中输入一年并计算它的天数,包括闰年
【发布时间】:2021-09-13 20:47:08
【问题描述】:

考虑到闰年比其他年份多一天,我需要修改以下代码,以便我可以输入给定年份并计算其天数。我认为 Scanner 函数和 if 语句在这里很有用,但我对如何修改代码感到困惑。

公开课作业{

public static void main(final String[] args)
    {
        final String[] months =
                {
                        "January", "February", "March", "April", "May", "June", "July", "August", "September",
                        "October", "November", "December"
                };
        final int[] days = {31, 28 , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


        //Print out days for each month and add them
        int total = 0;
        for (int m = 0; m < months.length; m++) {
            System.out.println(months[m] + " has " + days[m] + " days.");
            total += days[m];
        }
        System.out.println("===================\nTotal" + total + " days");


    }
}

另外,我需要计算从 1900 年到 1999 年(含)所有年份的总天数。如果我编写一个以一年为参数并返回该年总天数的方法,程序会更简洁,但我再次对它的细节感到困惑。

谢谢!

【问题讨论】:

  • 唯一受影响的月份是二月...所以,检查m == 1 &amp;&amp; isLeapYear(year),然后打印29 而不是28

标签: java arrays java.util.scanner leap-year


【解决方案1】:

java.time

我建议您使用现代日期时间 API java.time 来执行此操作。

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(getDays(2020));
        System.out.println(getDays(2021));
    }

    static int getDays(int year) {
        return LocalDate.of(year, 12, 31).getDayOfYear();
    }
}

输出:

366
365

ONLINE DEMO

通过 Trail: Date Time 了解有关 modern Date-Time API* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能反向移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

    【解决方案2】:

    您的家庭作业是否允许您使用现代 Java 日期和时间 API java.time?它应该。这是一个人在现实生活中会无条件使用的东西,所以我会说这是你需要学习去做的事情。

    1. 是的:只需使用Year 类及其length() 方法。
    2. 不:对不起,那你得自己算算了。在公历中,一年是闰年,如果能被 4 整除,则有 366 天,除非能被 100 整除,否则不能被 400 整除。所以 2000 年是闰年,2100 年不是。这已被编入 Java 数千次,如果需要,只需搜索即可。

    链接:Documentation of Year.length()

    【讨论】:

      【解决方案3】:

      对您的代码做最少的更改,我编写了另一个循环来遍历所有需要的年份。在这里你只需要给 start_year 和 end_year 变量它们的值,这里的标志变量也将确定当前年份是否是闰年。基于此,如果月份为 2 月且年份为闰年,则 2 月将天数增加 1。

      public class MyClass {
          public static void main(final String[] args)
          {
              final String[] months =
                      {
                              "January", "February", "March", "April", "May", "June", "July", "August", "September",
                              "October", "November", "December"
                      };
              final int[] days = {31, 28 , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
      
      
              //Print out days for each month and add them
              int start_year = 2000;
              int end_year = 2001;
              
              int total = 0;
              for(int year=start_year ; year<=end_year; ++year){
                  //to check if year is prime, flag is true if year is leap else false
                  boolean flag = (((year % 4 == 0) && (year % 100 != 0)) ||(year % 400 == 0));
                  
                  for (int m = 0; m < months.length; m++) {
                      if(flag&&m==1){
                          System.out.println(months[m] + " has " + (days[m]+1) + " days.");
                          total += days[m]+1;
                      }
                      else{
                          System.out.println(months[m] + " has " + days[m] + " days.");
                          total += days[m];
                      }
                  }
                  System.out.println("===================\nTotal" + total + " days");
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多