题目
前一日函数 Pre Date 是 NextDate的逆函数,即给定一 个月份、日期、年,会返回前一天的日期。
年的取值在1812年到2017年。
日的取值 在 1日到 31 日之间。
月的取值 在 1到 12 月之间
测试程序实现
package test2; import java.util.*; public class Date { public static void main(String[] args) { int day=0,preday = 0,month = 0,premonth = 0, year = 0,preyear = 0,flag = 0,right = 0; while(right==0) {//提示从键盘输入年月日 System.out.println("Input year:"); Scanner sc = new Scanner(System.in); year = sc.nextInt(); System.out.println("Input month:"); Scanner sc1 = new Scanner(System.in); month = sc1.nextInt(); System.out.println("Input day:"); Scanner sc2 = new Scanner(System.in); day = sc2.nextInt(); if(year<=2017&&year>=1812)//判断是否在合法年份内 { if((year%4==0&&year%100!=0)||year%400==0)//判断闰年 { flag=1; } if(month==1){ if(day<=31&&day>=1) { right=1; } if(day==1){//判断一月的临界情况 preyear=year-1; premonth=12; preday=31; } else{ preyear=year; premonth=month; preday=day-1; } } if(month==2){ if(flag==1&&(day<=29&&day>=1)||flag==0&&(day<=28&&day>=1)) { right=1; } if(day==1){//判断二月的临界情况 preyear=year; premonth=1; preday=31; } else{ preyear=year; premonth=month; preday=day-1; } } if(month==3){ if(day<=31&&day>=1) { right=1; } if(day==1&&flag==1){//当年为闰年时临界情况 preyear=year; premonth=month-1; preday=29; } else{ if(day==1&&flag==0){//当年为平年的临界情况 preyear=year; premonth=2; preday=28; } else{ preyear=year; premonth=month; preday=day-1; } } } if(month==4||month==6||month==9||month==11){//非特殊月份前一月为31天且当月为30天的月份 if(day<=30&&day>=1) { right=1; } if(day==1){ preyear=year; premonth=month-1; preday=31; } else{ preyear=year; premonth=month; preday=day-1; } } if(month==5||month==7||month==10||month==12){//非特殊月份前一月为30天且当月为31天的月份 if(day<=31&&day>=1) { right=1; } if(day==1){ preyear=year; premonth=month-1; preday=30; } else{ preyear=year; premonth=month; preday=day-1; } } if(month==8){//八月为特殊月份,当月和前一月均为31天,单独判断该月份 if(day<=31&&day>=1) { right=1; } if(day==1){ preyear=year; premonth=month-1; preday=31; } else{ preyear=year; premonth=month; preday=day-1; } } } if(right==0)//输入出错,提示重新输入 System.out.println("input error, please input again!"); } System.out.println("the predate is "+preyear+"——"+premonth+"——"+preday); } }
决策表
Y1={年:年是闰年}
Y2={年:年不是闰年}
M1={月:此月是1月}
M2={月:此月是2月}
M3={月:此月是3月}
M4={月:此月是8月}
M5={月:此月前一月有30天}
M6={月:此月前一月有31天,一月和十二月除外}
D1={日:日期=1}
D2={日:日期不等于1}
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
c1:月 |
M1 |
M1 |
M2 |
M2 |
M2 |
M3 |
M3 |
M3 |
M4 |
c2:日 |
D1 |
D2 |
D1 |
D2 |
D2 |
D1 |
D1 |
D2 |
D1 |
c3:年 |
- |
- |
- |
Y1 |
Y2 |
Y1 |
Y2 |
||
行为: |
|||||||||
a1:不可能 |
|||||||||
a2:日期减1 |
X |
X |
X |
X |
|||||
a3:日期复位 |
X |
X |
X |
X |
X |
||||
a4:月份减1 |
X |
X |
X |
X |
|||||
a5:月份复位 |
X |
||||||||
A6:年减1 |
X |
10 |
11 |
12 |
13 |
14 |
|
c1:月 |
M4 |
M5 |
M5 |
M6 |
M6 |
c2:日 |
D2 |
D1 |
D2 |
D1 |
D2 |
c3:年 |
- |
- |
- |
- |
|
行为 |
|||||
a1:不可能 |
|||||
a2:日期减1 |
X |
X |
X |
||
a3:日期复位 |
X |
X |
|||
a4:月份减1 |
X |
X |
|||
a5:月份复位 |
|||||
A6:年减1 |
测试结果
用例ID |
输入数据 |
预期输出 |
实际输出 |
是否通过 |
备注 |
1 |
2016 1 1 |
2015 12 31 |
2015——12——31 |
是 |
无 |
2 |
2016 1 2 |
2016 1 1 |
2016——1——1 |
是 |
无 |
3 |
2016 2 1 |
2016 1 31 |
2016——1——1 |
是 |
无 |
4 |
2016 2 2 |
2016 2 1 |
2016——2——1 |
是 |
无 |
5 |
2017 2 2 |
2017 2 1 |
2017——2——1 |
是 |
无 |
6 |
2016 3 1 |
2016 2 29 |
2016——2——29 |
是 |
无 |
7 |
2017 3 1 |
2017 2 28 |
2017——2——28 |
是 |
无 |
8 |
2016 3 2 |
2016 3 1 |
2016——3——1 |
是 |
无 |
9 |
2017 8 1 |
2017 7 31 |
2017——7——31 |
是 |
无 |
10 |
2017 8 2 |
2017 8 1 |
2017——8——1 |
是 |
无 |
11 |
2017 2 29 |
输入无效 |
input error, please input again! |
是 |
无 |
12 |
1900 2 29 |
输入无效 |
input error, please input again! |
是 |
无 |
13 |
2018 13 1 |
输入无效 |
input error, please input again! |
是 |
无 |