[英]Java - Can I simplify this code using Recursion or any other methods?
所以我有这种方法,roosterID是用于根据当前年份和年份生成ID,这是我想出的方法,但是我认为这不是最好的方法,我尝试过该方法在某些时候是递归的。 那不是我想要的那样工作。 至少,我尝试过的方式。 基本上说一年有53个星期,我叫rDAO的load方法,其中包含本周的roosterID和接下来的2周。 基本上,我希望roosterID在201353之后的那一周是20141,仅使用roosterID + 1就可以使其成为201354。我希望我的解释不是垃圾。
下面的代码有效,我只是认为这有点脏而且不专业,可以做得更好,如果有任何更改,我必须重做几乎所有代码,所以我想提出一些建议。
public void getWeekTabs(){
gc.setFirstDayOfWeek(Calendar.MONDAY);
if(gc.get(Calendar.WEEK_OF_YEAR) <= gc.getWeeksInWeekYear()-2){
roosterID = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR)) + Integer.toString(gc.get(Calendar.WEEK_OF_YEAR)));
rDAO.load(roosterID);
rDAO.load(roosterID +1);
rDAO.load(roosterID +2);
}else if(gc.get(Calendar.WEEK_OF_YEAR) == gc.getWeeksInWeekYear()-1){
roosterIDtemp = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR) +1 ) + Integer.toString(1));
rDAO.load(roosterID);
rDAO.load(roosterID +1);
rDAO.load(roosterIDtemp);
}else if(gc.get(Calendar.WEEK_OF_YEAR) == gc.getWeeksInWeekYear()){
roosterIDtemp = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR) +1 ) + Integer.toString(1));
rDAO.load(roosterID);
rDAO.load(roosterIDtemp);
rDAO.load(roosterIDtemp +1);
}
}
首先,这很奇怪:
roosterID = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR)) + Integer.toString(gc.get(Calendar.WEEK_OF_YEAR)));
做这个:
public String makeRoosterId(Calendar gc) {
return String.format("%d%d", gc.get(Calendar.YEAR), gc.get(Calendar.WEEK_OF_YEAR));
}
如果要使用201401而不是20141,则可以修改格式表达式来执行此操作。 现在,加载您的三个项目:
Calendar c = Calendar.getInstance(); // current date
rDAO.load(makeRoosterId(c)); // Load this week
c.add(Calendar.WEEK_OF_YEAR, 1);
rDAO.load(makeRoosterId(c)); // Load next week
c.add(Calendar.WEEK_OF_YEAR, 1);
rDAO.load(makeRoosterId(c)); // Load the week after that
那应该做。
编辑 :查看有关在年份边界发生的问题的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.