我需要另一双眼睛告诉我我再次愚蠢(关于计算)

时间:2015-03-06 07:44:26

标签: java if-statement

我实际上是想通过知道日期来计算一周的日期,例如1950年2月20日星期一。当然还有很多其他的问题,我确实已经有了这个公式。 事情是某种程度上,当我添加一个if语句,我想让我们说3然后我得到2,如果我应该得到0我得到-1。有人可以请我看看有什么问题吗?

这些月份代码变量将是我需要的输出,这是输出继续输出错误输出的部分。

/* Month Code */
private static int JAN_CODE = 1;
private static int FEB_CODE = 4;
private static int MAR_CODE = 4;
private static int APR_CODE = 0;
private static int MAY_CODE = 2;
private static int JUN_CODE = 5;
private static int JUL_CODE = 0;
private static int AUG_CODE = 3;
private static int SEP_CODE = 6;
private static int OCT_CODE = 1;
private static int NOV_CODE = 4;
private static int DEC_CODE = 6;

闰年计算并返回true或false

private boolean isLeapYear(){
    if((year % 100 == 0) && (year % 400 != 0))
    {
        return false;
    }else if(year % 4 == 0)
    {
        return true;
    }else{
        return false;
    }
}

这是返回monthCode的部分,具体取决于月份的整数

 public int getMonthCode(){
    // variable to store the code
    int monthCode;

    // January and February dates in leap years: subtract 1
    boolean i = isLeapYear();
    if (i == true){
        JAN_CODE -= 1;
        FEB_CODE -= 1;
    }

    // Check which month uses which month code
    switch (month){
        case JANUARY_INT: monthCode = JAN_CODE;
            break;
        case FEBURARY_INT: monthCode = FEB_CODE;
            break;
        case MARCH_INT: monthCode = MAR_CODE;
            break;
        case APRIL_INT: monthCode = APR_CODE;
            break;
        case MAY_INT: monthCode = MAY_CODE;
            break;
        case JUNE_INT: monthCode = JUN_CODE;
            break;
        case JULY_INT: monthCode = JUL_CODE;
            break;
        case AUGUST_INT: monthCode = AUG_CODE;
            break;
        case SEPTEMBER_INT: monthCode = SEP_CODE;
            break;
        case OCTOBER_INT: monthCode = OCT_CODE;
            break;
        case NOVEMBER_INT: monthCode = NOV_CODE;
            break;
        case DECEMBER_INT: monthCode = DEC_CODE;
            break;
        default: monthCode = 0;
    }
    return monthCode;
}

一个简单的代码,可以看到返回的内容

public void getCode(){
    System.out.println("Code: "+getMonthCode());
}

我尝试使用仍然输出错误的JAN_CODE = JAN_CODE - 1;。 那么让我们说如果输入1月份,我得到的JAN_CODE如果不是闰年则为1但是如果它是闰年它应该是0但是在我输入if(i == true)语句之后看它是否是飞跃输入年份和1月,我获得的monthCode是-1,如果2月我得到2,但我想假设1月份为0而2月份为3则不是吗? 如果我拿出if语句,那么返回的是Jan的1和2的4。

有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:1)

我首先要修改函数如何操作数据,传递参数而不是使用静态内容。这应该让你知道如何解决它:

private boolean isLeapYear(inYear){
    if((inYear % 100 == 0) && (inYear % 400 != 0))
    {
        return false;
    }else if(inYear % 4 == 0)
    {
        return true;
    }else{
        return false;
    }
}

private int getNewMonthCode(inYear, inMonthCode) {
    if (isLeapYear(inYear)) {
        return inMonthCode-1;
    }
    return inMonthCode;
}

public int getMonthCode(inYear, inMonth) {
    // variable to store the code
    int monthCode;

    // Check which month uses which month code
    switch (inMonth){
        case JANUARY_INT: monthCode = getNewMonthCode(inYear, JAN_CODE);
            break;
        case FEBURARY_INT: monthCode = getNewMonthCode(inYear, FEB_CODE);
            break;
        case MARCH_INT: monthCode = MAR_CODE;
            break;
        case APRIL_INT: monthCode = APR_CODE;
            break;
        case MAY_INT: monthCode = MAY_CODE;
            break;
        case JUNE_INT: monthCode = JUN_CODE;
            break;
        case JULY_INT: monthCode = JUL_CODE;
            break;
        case AUGUST_INT: monthCode = AUG_CODE;
            break;
        case SEPTEMBER_INT: monthCode = SEP_CODE;
            break;
        case OCTOBER_INT: monthCode = OCT_CODE;
            break;
        case NOVEMBER_INT: monthCode = NOV_CODE;
            break;
        case DECEMBER_INT: monthCode = DEC_CODE;
            break;
        default: monthCode = 0;
    }
    return monthCode;
}

由System.out.println调用(“代码:”+ getMonthCode(1954,1)); // 1954年1月

您仍然可以使用全局/静态变量:getMonthCode(year,month)