java 判断的问题
目前有下列一组规则,需要判断是否可用。
有4个参数:
canReserve=true;//是否可用
startday;//入住日期
endday;//离店日期
days;//入住天数
predays//提前入住天数
有一组list数据,对象内容为startdate、enddate、CloseToArrival、CloseToArrival、status、MinLOS、MAXLOS、LeadingTime
比对规则为:
1、状态(Status):“O” 或为空表明可用;“C”关闭或者满房。入住期间,如果该供应商、酒店、房型、价格计划下,有一天出现关房状态C,则该产品不可预订。
2、是否对当天入住关闭(CloseToArrival),“O”生效,“C”或为空不再做该检查。即如果入住日期落在了[STARTDATE,ENDDATE]期间,且该字段为”O”,则该供应商、酒店、房型、价格计划不可预订。
3、是否对当天离店关闭(CloseToArrival),“O”生效,“C” 或为空不做该检查。即如果离店日期落在了[STARTDATE,ENDDATE]期间,且该字段为“O”,则该供应商、酒店、房型、价格计划不可预订。
4、最小入住天数(MinLOS)。当大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果入住天数大于等于该值,才能预订。
5、最大入住天数(MAXLOS)。当大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果入住天数小于等于该值,才能预订。
6、提前预订天数(LeadingTime)。当该字段大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果提前预订天数大于等于该值,才能预订。
我写的java伪代码为:
- Java code
for(每一个价格计划){ for(everyday){ if(everyday>=startdate and everyday<=enddate){ canReserve=true; if(Status=="O"){ canReserve=false;//不能预定 break; canReserve=false;//不能预定 Break; }else{ //是否对当天入住关闭(CloseToArrival if(everyday==startday){ if(CloseToArrival=='O' and everyday>=startdate and everday<=enddate){ canReserve=false; break; } //最小入住天数 if(MinLOS>0){ if(everyday>=startdate and everday<=enddate){ if(days>MinLOS) canReserve=true; else{ canReserve=false; break; } }else{ canReserve=false; break; } } //最大入住天数 if(MAXLOS>0){ if(everyday>=startdate and everday<=enddate){ if(days<MAXLOS) canReserve=true; else{ canReserve=false; break; } }else{ canReserve=false; break; } } //提前预定天数 if(LeadingTime>0){ if(everyday>=startdate and everday<=enddate){ if(predays>LeadingTime) canReserve=true; else{ canReserve=false; break; } }else{ canReserve=false; break; } } } //是否对当天离店关闭(CloseToDeparture if(everyday==endday){ if(CloseToDeparture=='O' and everyday>=startdate and everday<=enddate){ canReserve=false; break; } } }else{ canReserve=false;//不能预定 Continue; } }}
觉得自己写的很嗦,请问大侠们,有更好的写法吗?
[解决办法]
嵌套的分支语句太多了。第一个else语句中的第一层if中的内容封装成函数。
[解决办法]
写了这么多,lz你的问题是啥?
[解决办法]
不好意思,没耐心看完。 但是我觉得状态机可以解决这个问题。
随着年龄的增长,不是应该越来越有耐心的嘛。为什么我越来越没有耐心呢。
不好意思,跑题了。
[解决办法]
为什么你不用switch做判断了。