1. 问题描述:从控制台输入一个4位数字的年份,输入月份,号数那么判断是一年中的第几天
因为年份涉及到是闰年还是平年的问题,那么我们一开始的时候需要判断输入的年份是平年还是闰年然后才可以对特殊的2月份进行处理一下,使用一个额外的数组来存储一年中每个月的天数,方便我们在for循环中进行操作,我们可以在for循环中对月份的天数进行累加,直到月份达到输入月份的上一个月份即可,然后再循环之外加上输入的号数那么就可以知道是一年中的第几天了
判断平年还是闰年,可以从百度百科中查询到闰年的判定为:
普通年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年)
世纪年:能被400整除的为世纪闰年(如2000年是闰年,1900年不是闰年)
所以一般的思路可以这样写:
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
}
判断是闰年之后那么我们可以对数组中2月份天数设置为29天就可以了
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
int month = sc.nextInt();
int day = sc.nextInt();
int days = 0;
int monthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
//判断是闰年那么应该将数组中第二个元素的值设置为29天
monthDays[1] = 29;
}
//注意应该是i < month - 1不是小于month
for(int i = 0; i < month - 1; i++){
days += monthDays[i];
}
days += day;
System.out.println(year + "年的" + month + "月" + day + "日是一年中的第" + days + "天");
sc.close();
}
}
测试输入:
2018 11 11
那么应该输出的是315天
2. 除了上面的问题,我们还可以想到输入年份,一年中的第几天那么判断是几月几日这个问题
首先向之前一样输入月份都是需要判断当前的年份是否为闰年,然后使用一个数组将每个月的天数存储起来,在for循环中进行当前月份天数的递减,并且使用一个计数变量来计算当前循环到第几个月了,for循环的循环条件为天数减去当前月份的天数应该大于零,那么循环结束剩下的天数就是当前月份的几号了
具体的代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
int day = sc.nextInt();
int n = day;
int monthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
//判断是闰年那么应该将数组中第二个元素的值设置为29天
monthDays[1] = 29;
}
//初始化月份
int index = 1;
//注意判断应该是大于零而不是等于零
for(int i = 0; i < monthDays.length && day - monthDays[i] > 0; i++){
day -= monthDays[i];
index++;
}
System.out.println(year + "年的第" + n + "天是" + index + "月" + day + "号");
sc.close();
}
}
测试数据比如:
2018 315
那么输出应该是11月11日
还可以输入其他的数据进行测试