实现PreDate,前一日函数PreDate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。年的取值范围在1812到2017年。日的取值在1日到31日月的取值在1到12月之间。
一、代码如下:
package experiment2;
import java.util.Scanner;
public class PreDate {
public static void main(String args[]){
System.out.println("请输入日期:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
int month = sc.nextInt();
int day = sc.nextInt();
if(year<1812||year>2017||month<1||month>31||day<1||day>31){
System.out.println("不可能");
}
else{
if(day==1)
{
if(month==1)
{
year=year-1;
month=12;
day=31;
}
else if(month==2||month==4||month==6||month==8||month==9||month==11){
month=month-1;
day=31;
}
else if(month==5||month==7||month==10||month==12){
month=month-1;
day=30;
}
else{
if(year%4==0&&year%100!=0||year%400==0){
month=month-1;
day=29;
}
else{
month=month-1;
day=28;
}
}
System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
}
else{
if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day<=31) {
day=day-1;
System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
}
else if((month==4||month==6||month==9||month==11)&&day<=30) {
day=day-1;
System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
}
else if(month==2) {
if((year%4==0&&year%100!=0||year%400==0)&&day<=29) {
day=day-1;
System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
}
else if(day<=28) {
day=day-1;
System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
}
else {
System.out.println("不可能");
}
}
else {
System.out.println("不可能");
}
}
}
}
}
二、决策表分析过程如下
1. 定义条件桩、动作桩
1.1输入
—year
—month
—day
1.2为获得前一个日期,PreDate函数需执行的操作只有如下5种
—day变量值减1
—day变量值为31
—day变量值为30
—day变量值为28
—day变量值为29
—month变量值减1
—month变量值为12
—year变量值减1
1.3考虑规则个数
M1:{month:month为4或6或8或9或11月};
M2:{month:month为5或7或10或12月 };
M3:{month:month是1月};
M4: {month: month是2月};
M5:{month: month是3月};
D1:{day: day=1};
D2:{day:1<day≤28};
D3:{day:day=29};
D4:{day:day=30};
D5:{day:day=31};
Y1:{year:year是闰年};
Y2:{year:year不是闰年};
2.输入条件项动作项
规则 选项 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
|
条件 |
C1:year在 |
— |
— |
— |
— |
— |
— |
— |
— |
— |
— |
— |
C2:month在 |
M1 |
M1 |
M1 |
M1 |
M1 |
M2 |
M2 |
M2 |
M2 |
M2 |
M3 |
|
C3:day在 |
D1 |
D2 |
D3 |
D4 |
D5 |
D1 |
D2 |
D3 |
D4 |
D5 |
D1 |
|
动作 |
A1:不可能 |
|
|
|
|
√ |
|
|
|
|
|
|
A2:day减1 |
|
√ |
√ |
√ |
|
|
√ |
√ |
√ |