【问题标题】:Computing multiple years that is a leap year in Java计算Java中闰年的多年
【发布时间】:2014-01-04 07:44:59
【问题描述】:

我想做的是创建一个闰年计算器,它不仅计算一年,而且用户可以输入多年。现在,我只知道如何计算一年。

输出应该是这样的:

此程序测试给定年份是否为闰年。

输入起始年份:2008

输入结束年份:2013

2008 年是闰年

2012 年是闰年

非常感谢您的回复!帮助我学到的东西比我的讲师实际教的要多:)

import java.util.Scanner;
public class LeapYears
{
public static void main (String [] args)
{
Scanner keyboard = new Scanner (System.in); 

System.out.println ("This program tests whether a given " + "year is a leap year.");

    System.out.print ("Type the starting year: ");
    int year = keyboard.nextInt ();

    System.out.print ("Type the ending year: ");
    int EndYear = keyboard.nextInt ();

if (((year%4 == 0) && (year%100 != 0)) || (year%400 == 0)) 

System.out.println (year + " is a leap year.");
    else
        System.out.println (year + " is not a leap year.");

} 
} 

【问题讨论】:

标签: java


【解决方案1】:

您可以简单地将闰年评估代码包装在一个方法中,然后在循环中调用它,例如:

public boolean isLeapYear(int year){
   if (((year%4 == 0) && (year%100 != 0)) || (year%400 == 0)) 
       return true;
   else 
       return false;
} 

在你的主要方法中:

System.out.print("Type the starting year: ");
int startYear = keyboard.nextInt();

System.out.print("Type the ending year: ");
int endYear = keyboard.nextInt();

for(int currentYear=startYear;currentYear++;currentYear<=endYear){
    if(isLeapYear(currentYear))
       System.out.println(currentYear + " is a leap year.");
    else
       System.out.println(currentYear + " is not a leap year.");
}

除此之外,对于用户输入不是整数、startYear大于endYear等情况,最好添加一些防御性代码。

【讨论】:

    【解决方案2】:

    试试这个

        GregorianCalendar gc = new GregorianCalendar();
        for(int y = year; y <= endYear; y++) {
            if (gc.isLeapYear(y)) {
                System.out.println(y + " is leap year");
            } else {
                System.out.println(y + " is not leap year");
            }
        }
    

    【讨论】:

      【解决方案3】:

      使用 while 循环进行多年检查,但一旦获得第一个闰年,则为下一次迭代增加 4 年(即 year = year + 4;)。这样可以避免不必要的检查。

          Scanner keyboard = new Scanner(System.in);
      
          System.out.println("This program tests whether a given "
                  + "year is a leap year.");
      
          System.out.print("Type the starting year: ");
          int year = keyboard.nextInt();
      
          System.out.print("Type the ending year: ");
          int EndYear = keyboard.nextInt();
      
          while (year <= EndYear) {
              if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
      
                  System.out.println(year + " is a leap year.");
                  year = year + 4;
              } else {
                  //System.out.println(year + " is not a leap year.");
                  year++;
      
              }
          }
      

      【讨论】:

      • year = year++; 没有按照你的想法做。
      • 有更多的规则然后只是 year% 4 ==0 在这里查看它们en.wikipedia.org/wiki/Leap_year#Algorithm。基本上,如果它可以由 4 而不是 100 设计,除非它也可以由 400 确定,那么它就是闰年。
      • 我同意。这就是为什么年 = 年 + 4;很好。它只确保年份可以被 4 整除,这对于每个闰年条件都是如此。
      【解决方案4】:

      是的,这是一个循环问题。试试这样的while循环:

      import java.util.Scanner;
      public class LeapYear {
          public static void main (String [] args)
          {
              Scanner keyboard = new Scanner (System.in); 
      
              System.out.println ("This program tests whether a given " + "year is a leap year.");
      
              System.out.print ("Type the starting year: ");
              int year = keyboard.nextInt ();
      
              System.out.print ("Type the ending year: ");
              int EndYear = keyboard.nextInt ();
              int temp=year;
              while(temp<EndYear)
              {   if (((temp%4 == 0) && (temp%100 != 0)) || (temp%400 == 0)) {
      
                      System.out.println (temp + " is a leap year.");
                  }
                  else
                  {
                      System.out.println (temp + " is not a leap year.");
                  }
                  temp++;
      
              }
      
      
          } 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2021-06-22
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多