1.思路分析
1.1判断闰年或平年->确定2月天数(闰年29天,平年28天)->累加计算
1.2将思路转换为数学模型
闰年:能被4整除但不能被100整除,或能被400整数
逐个月份累加即可
2.程序转换
2.1将数学模型对应Java编程实现
对应知识点:switch分支或for循环、if else分支、和运算符
参考以下代码:
//引入扫描器对象
import java.util.Scanner;
public class Switch2 {
public static void main(String[] args) {
//新建扫描器对象scan
Scanner scan = new Scanner(System.in);
//扫描3个整数表示年份、月份、日期
System.out.println("请输入年份");
int year = scan.nextInt();
System.out.println("请输入月份");
int month = scan.nextInt();
System.out.println("请输入日期");
int day = scan.nextInt();
//判断闰年还是平年,确定2月天数
int f;//2月天数
int days=0;//天数
if(year%4==0&&year%100!=0||year%400==0){
f = 29;
}else {
f = 28;
}
switch (month){
case 1:days = day;break;
case 2:days = 31+day;break;
case 3:days = 31+f+day;break;
case 4:days = 31+f+31+day;break;
case 5:days = 31+f+31+30+day;break;
case 6:days = 31+f+31+30+31+day;break;
case 7:days = 31+f+31+30+31+30+day;break;
case 8:days = 31+f+31+30+31+30+31+day;break;
case 9:days = 31+f+31+30+31+30+31+31+day;break;
case 10:days = 31+f+31+30+31+30+31+31+30+day;break;
case 11:days = 31+f+31+30+31+30+31+31+30+31+day;break;
case 12:days = 31+f+31+30+31+30+31+31+30+31+30+day;break;
}
System.out.println(days);
}
}
2.2代码优化
优化算法,让程序更简单,思路更明了,功能更强大
参考:相对于程序1,可改变以下程序
switch (month){
case 12:days += 30;
case 11:days += 31;
case 10:days += 30;
case 9:days += 31;
case 8:days += 31;
case 7:days += 30;
case 6:days += 31;
case 5:days += 30;
case 4:days += 31;
case 3:days += f;
case 2:days += 31;
case 1:days += day;
}
2.3使用for循环实现
相对于程序1,可将以下代码替换switch结构
for(int i =1;i<=month;i++){
if(i==12||i==10||i==7||i==5){
days+=30;
}
if(i==11||i==9||i==8||i==6||i==4||i==2){
days+=31;
}
if(i==3){days+=f;}
if(i==1){days+=day;}
}