代码如下:
import java.util.Scanner;
public class Day {
public static void main(String[] args) {
System.out.println("--------天数计算器--------");
Scanner scanner = new Scanner(System.in);//新建键盘输入
//-------------------------------键盘输入限制-------------------------------------//
System.out.println("请输入年份:");
int year = scanner.nextInt();//输入年
while (year < 0){
System.out.println("耶稣还没出生,请重新输入");
year = scanner.nextInt();
}
//--------------------------------------------------------------------//
System.out.println("请输入月份:");
int month = scanner.nextInt();//输入月
while(month > 12 || month <= 0){
System.out.println("大哥请输入一个正确的月份");
month = scanner.nextInt();
}
//--------------------------------------------------------------------//
System.out.println("请输入日期:");
int day = scanner.nextInt();
//判断输入的月份是否为大月
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
//添加限制条件
while(day <= 0 || day > 31){
System.out.println("该月是大月,请重新输入一个1-31的日期");
day = scanner.nextInt();
}
} else if (month == 4 || month == 6 || month == 9 || month == 11){//判断输入的月份是小月
//添加限制条件
while(day <= 0 || day > 30){
System.out.println("该月是小月,请重新输入一个1-30的日期");
day = scanner.nextInt();
}
} else {//为2月添加限制条件
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
while (day <= 0 || day >=30){//闰年二月不超过29天
System.out.println("这一年是闰年,请重新输入1-29之间的日期");
day = scanner.nextInt();
}
} else {
while (day <= 0 || day >= 29){//平年二月不超过28天
System.out.println("这一年是平年,请重新输入1-28之间的日期");
day = scanner.nextInt();
}
}
}
//---------------------------计算代码-----------------------------------------//
//先if判断平年闰年
//平年:
if (year % 4 != 0 && year % 100 == 0 && year % 400 != 0) {
//switch选择月份
switch (month) {
//从12月往下穿透相加:
case 12:case 10:case 7:case 5:
day += 30;
case 11:case 9:case 8:case 6:case 4:
day += 31;
case 3:
day += 28;//平年2月有28天
case 2:
day += 31;
case 1:
System.out.println("这天是"+year+"年第" + day + "天");
break;
default:
System.out.println("错误的输入!!");//报错
break;}
}
else {
//闰年
switch (month) {
//从12月往下穿透相加:
case 12:case 10:case 7:case 5:
day += 30;
case 11:case 9:case 8:case 6:case 4:
day += 31;
case 3:
day += 29;//闰年2月有29天
case 2:
day += 31;
case 1:
System.out.println("这天是"+year+"年第" + day + "天");
break;
default:
System.out.println("错误的输入!!");//报错
break;
}
}
}
}
1、这里需要把输入内容作出限定包括年,月,日的限定,当需要限定输入内容时while循环可以实现判断错误并重新输入
2、switch中在case遇到break之前会发生穿透,运用倒序穿透相加可实现题目要求
效果如下