需求说明:
编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天。
实现思路:
(1)声明变量 year、month和 date,用于存储日期中的年、月、日。
(2)声明变量 days,用于存储累加的天数。
(3)通过 Scanner 接收用户输入的日期,并为变量 year、month和 date 赋值。
(4)输入日期是当前输入年份的第几天的计算,包括两个部分天数的计算:1输入月份之前的所有月份天数的累加;2输入月份中已过天数累加。例如,输入日期2020年5月7日。先计算2020年1月份至4月份所有的天数,2020年1月对应的天数31天,2月份(2020年为闰年)对应的天数29天。3月份对应的天数31天,4月份天数30天,此时,不能包含五月的天数,2020年1月至4月所有的天数累加为121天。之后继续累加5月已过的天数7天,最终结果为2020年5月7日为当前年份的128天。
(5)根据天数累加计算规则,需要循环多次依次累加所输入月份之前的每个月份的天数,使用for循环结构实现。
①表达式。需要累加month之前的月份,声明变量i作为循环控制变量,根据运行效果,建议将i的初始值设置为1,所以可将for循环中3个表达式设置为:
表达式1:int i = 1 表达式2:i < month 表达式3:i++
②循环操作。使用switch结构,计算i对应月份的天数并进行累加,当i为2时,需要进行闰年判断。
(6)使用上一步计算的结果,继续累加输入月份已过的天数。
(7)使用 System.out.printlf(); 实现格式化输出运算结果。
实现代码:
import java.util.Scanner; public class kkk { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //年月日 int year,month,date; int days = 0; //天数 //接收用户输入的年月日 System.out.println("请输入日期:"); year = sc.nextInt(); month = sc.nextInt(); date = sc.nextInt(); //使用循环结构,依次累加每月的天数(不包括输入月份当中的月份) for(int i = 1; i < month; i++) { //使用switch结构,实现每月天数计算 switch(i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days +=31; break; case 4: case 6: case 9: case 11: days +=30; break; case 2: //闰年判断 if((year % 4 == 0 && year % 100!=0)||(year % 400 == 0)){ days += 29; break; }else { days += 28; break; } } } //累加输入日期中当前月份已过的天数 days += date; System.out.printf("%d年%d月%d日是当前年的第%d天",year,month,date,days); } }