话说振宇哥的测试课,还要写三个函数:triangle,nextday,replace。
为了避免复杂的逻辑判断,使用了表驱动的实现方法。
其实我下边的代码的逻辑判断一点不复杂,欢迎观赏!
真正复杂的好象是判断星期几的函数:也就是给你年月日,然后判断当天是星期几
public class Main {
private int [] leapMonths =
{
31,29,31,30,31,30,31,31,30,31,30,31
};
private int [ ] nonLeapMonths =
{
31,28,31,30, 31,30,31,31,30,31,30,31
};
private int monthday [][] =
{
leapMonths, nonLeapMonths
};
/**
* 当输入的年月日是有效值的时候,返回true,否则返回false
* @param year
* @param month
* @param day
* @param re 这是一个存放结果值的数组,当返回值是true的时候,这个值有意义,否则是无效的
* @return
*/
public boolean work(int year , int month , int day , int [] re )
{
if(!isValidInput(year,month,day))
return false;
boolean isLeap = isLeap(year);
int index = isLeap ? 0:1;
if(day > monthday[index][month])
{
return false; //表示这个月的这一天是不合法的,比如润年的2月30号
}
else
if(day == monthday[index][month]) //nextday跳到了下一个月了
{
day = 1 ;
month++ ;
if(month > 12 )
{
month = 1;
year++;
}
}
else
{
day ++;
}
re[0] = year;
re[1] = month;
re[2] = day;
return true;
}
private boolean isLeap(int year)
{
if((year % 4 ==0) && (year % 100 !=0) )
return true;
if(year % 400 == 0)
return true;
return false;
}
/**
* 程序的作用是初步的检查年月日的合法性,没有检查年月日之间的关系
* @param year
* @param month
* @param day
* @return
*/
private boolean isValidInput( int year , int month , int day )
{
if(year<1970 || year > 2050)
return false;
if(month > 12 || month <= 0)
return false;
if(day >31 || day <= 0)
return false;
return true;
}
}
声明:上边的代码目前是没有经过测试的,等我们自动化测试工具开发好了以后,回进行测试的!!