题目:计算用户输入的日期离1900年1月1日相距多少天
解析:
- 用户输入日期,所以需要使用Scanner获取用户键盘输入数据
- 计算输入日期距离xxxx多少天,所以就是获取相差年份的天数+相差月份天数+相差天数
注意:
- 获取年份相差天数时要注意闰年平年,闰年366天,而平年是365天;
- 获取年份相差天数时,要注意不需要获取输入的年份当年的天数,因为输入的年份的天数是由输入的月份和天数决定的(极大可能不满365天)
- 在获取月份时,如果是一月,是不能直接加31天的(1月还没过完,这里可以直接跳过加输入年的月份,直接加日数即可)
- 在获取月份时,如果是1月和2月,注意2月的天数是由用户输入的决定,还不需要计算平年闰年;当用户输入的月份是3月及更后(此时二月肯定已经过完了,这时候计算输入的年份是否是闰年来决定总天数是否需要+1)
- 在计算完年份月份的天数时,需要加的日数需要减一(题目是相加多少天)
代码实现:
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入年份:");
int year = input.nextInt();
System.out.print("请输入月份:");
int month = input.nextInt();
int arr[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};//这里列出(平年)1到11月的天数,就算用户输入的是12月,需要加的天数也是由输入日数决定的
System.out.print("请输入日数:");
int day = input.nextInt();
int sum = 0;// 声明变量存放相距的天数
for (int i = 1900; i < year; i++) {//此处不能等于年份year
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {// 判断1900年至year之间的年份是否闰年
sum += 366;
} else {
sum += 365;
}
}
if (month != 1 && month != 2){// 在肯定过了2月后,判断输入年份是否闰年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
sum += 1;
}
}
for (int j = 1; j < month; j++) {//计算输入月份(不包括)的天数,当month是1时自动跳过该循环
sum += arr[j-1];
}
sum += day - 1;//加上日数-1,计算相距天数
System.out.println(sum);
}
}
在编译完成后验证是否正确(日期计算器等)