繁体   English   中英

Java-是否可以使用递归或任何其他方法简化此代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM