我似乎不明白为什么它不会打印超过一年的范围。到目前为止,除了那个我什么都准备好了。
起始年份不能早于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
}
}
}
3条答案
按热度按时间kt06eoxx1#
搜索
i
s可以同时被4和400整除,所以实际上是400。你大概想查的是
i
s可以被4整除,但不能被100整除,除非它们可以被400整除。一种写的方法是而且,没有闰年发现的信息应该在循环之后,而不是在else if中。只有在检查整个范围后,才能检测到未找到任何内容:
c6ubokkw2#
你的闰年条件不正确。
以下是一年符合闰年的条件:
可被400整除的-或-
可被4整除但不能被100整除
代替
具有
对于生产代码,我还建议您使用ootb java.time api:
每年被4整除就是闰年,除了被100整除的年份,但是如果这些百年被400整除就是闰年。例如,1700年、1800年和1900年不是闰年,而1600年和2000年是闰年
— 美国海军天文台
资料来源:https://en.wikipedia.org/wiki/gregorian_calendar
abithluo3#
似乎您需要修复的特定代码行是:
如果我们分析一下,你会发现只有
i
可被400整除,则返回true。如果更改为:你应该看到它的工作。清理我们得到的代码: