java程序的闰年范围

rqqzpn5f  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(293)

我似乎不明白为什么它不会打印超过一年的范围。到目前为止,除了那个我什么都准备好了。
起始年份不能早于1752,结束年份不能早于9999。我需要该程序找到所有的闰年之间选择的开始年和选择的结束年,然后打印所有这些闰年关闭用户。
在我添加 else if 如果给定范围内没有年份,则在末尾打印消息。如果可以的话,我会删除它,但是这个信息是我任务要求的一部分。

import java.util.Scanner;
class Final_Project_Mendenhall {
  public static void main(String[] args)
    {
        int startYear = 1752;
        int endYear = 9999;
        int i;
        int j = 0;

        Scanner in = new Scanner(System.in); //Scanner object to get user input for Start Year
        System.out.print("Enter the Start Year (Greater or equal to 1752):");
        startYear = in.nextInt(); //Get Start Year from user
            while (startYear < 1752){
            System.out.println("Enter a valid start year (Greater or equal to 1752):");
            startYear = in.nextInt(); //Get valid Start Year from user
        } //End while

        System.out.print("Enter the End Year (Less than 9999):");
        endYear = in.nextInt(); //Get End Year from user
            while (endYear > 9999){
            System.out.println("Enter a valid end year (Less than 9999):");
            endYear = in.nextInt(); //Get valid End Year from user
        } //End while

        System.out.println("Leap years:"); //Print Leap Years

        for (i = startYear; i <= endYear; i++){ //Loop through years between Start and End Years
          if ((0 == i % 4) && (0 == i % 400)){ //Find and print Leap Years, if there are
            System.out.println(i);
            j++;
          }//End if
        //End for
         else if(j == 0){
            System.out.println("There are no leap years in that range");
        }//End if
      }
      }
    }
kt06eoxx

kt06eoxx1#

if ((0 == i % 4) && (0 == i % 400))

搜索 i s可以同时被4和400整除,所以实际上是400。
你大概想查的是 i s可以被4整除,但不能被100整除,除非它们可以被400整除。一种写的方法是

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

而且,没有闰年发现的信息应该在循环之后,而不是在else if中。只有在检查整个范围后,才能检测到未找到任何内容:

for (i = startYear; i <= endYear; i++){ //Loop through years between Start and End Years
  if (((0 == i % 4) && (0 != i % 100)) || (0 == i % 400) { //Find and print Leap Years, if there are
    System.out.println(i);
    j++;
  } //End if
} //End for <--- the } was missing
if(j == 0) { // <--- no else
  System.out.println("There are no leap years in that range");
}
c6ubokkw

c6ubokkw2#

你的闰年条件不正确。
以下是一年符合闰年的条件:
可被400整除的-或-
可被4整除但不能被100整除
代替

if ((0 == i % 4) && (0 == i % 400))

具有

(0 == i % 400) || (0 == i % 4 && 0 != i % 100)

对于生产代码,我还建议您使用ootb java.time api:

for (i = startYear; i <= endYear; i++) {
    if (java.time.Year.isLeap(i)) {
        System.out.println(i);
    }
}

每年被4整除就是闰年,除了被100整除的年份,但是如果这些百年被400整除就是闰年。例如,1700年、1800年和1900年不是闰年,而1600年和2000年是闰年
— 美国海军天文台
资料来源:https://en.wikipedia.org/wiki/gregorian_calendar

abithluo

abithluo3#

似乎您需要修复的特定代码行是:

if ((0 == i % 4) && (0 == i % 400))

如果我们分析一下,你会发现只有 i 可被400整除,则返回true。如果更改为:

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

你应该看到它的工作。清理我们得到的代码:

import java.util.Scanner;
class Final_Project_Mendenhall {
  public static void main(String[] args)
    {
        int startYear = 1752;
        int endYear = 9999;
        int i;
        int j = 0;

        Scanner in = new Scanner(System.in);
        System.out.print("Enter the Start Year (Greater or equal to 1752):");
        startYear = in.nextInt(); //Get Start Year from user
        while (startYear < 1752){
            System.out.println("Enter a valid start year (Greater or equal to 1752):");
            startYear = in.nextInt(); //Get valid Start Year from user
        }

        System.out.print("Enter the End Year (Less than 9999):");
        endYear = in.nextInt(); //Get End Year from user
        while (endYear > 9999){
            System.out.println("Enter a valid end year (Less than 9999):");
            endYear = in.nextInt(); //Get valid End Year from user
        } //End while

        System.out.println("Leap years:"); //Print Leap Years

        for (i = startYear; i <= endYear; i++){
          if ((0 == i % 4 && 0 != i % 100) || (0 == i % 400)){
            System.out.println(i);
            j++;
          }
        }
        if(j == 0){
            System.out.println("There are no leap years in that range");
        }
    }
}

相关问题