0

我想获取变量(gmtHourPrev)的先前值,所以我执行以下操作。出于测试目的更改时间后,我看到 gmtHourPrev 的值始终等于 gmtHour 并且无法获取它的先前值。我在这里做错了什么?谢谢

private int gmtHour;
private int gmtHourPrev;

public int getHour() {
    return gmtHour;
}    
public void setGmtHour(int gHour) {
    this.gmtHourPrev = this.gmtHour;
    this.gmtHour = gHour;
}    
public int getGmtHourPrev() {
    return gmtHourPrev;
}

public String getGmtHourInfo() {
    gmtHour = Calendar.HOUR;
    setGmtHour(gmtHour);
    if (isOK() == true) {
       return gmtHour;
    }
    else {
       return getGmtHourPrev();
    }
}
4

4 回答 4

1

看这个:

gmtHour = Calendar.HOUR;
setGmtHour(gmtHour);

除了Calendar.HOUR 可能不是您认为的那样(这是一个常数)这一事实之外,您实际上是两次设置变量。上面的代码等价于:

gmtHour = Calendar.HOUR;
gmtHourPrev = gmtHour;
gmtHour = gmtHour;

这相当于:

gmtHour = Calendar.HOUR;
gmtHourPrev = Calendar.HOUR;

您只需要设置一次,例如只需调用

setGmtHour(Calendar.HOUR);

尽管如此,这个值几乎肯定不是你想要的......

你可能想要:

setGmtHour(calendar.get(Calendar.HOUR));

对于某些实例Calendar

哦,尝试int从声明为返回的方法返回一个String也不是一个好主意......

于 2012-08-04T09:16:31.623 回答
0

Calendar.HOUR是一个静态 final int(一个常量),它只是引用 Calendar 对象中的一个字段。它的用途是在get()调用 Calendar 实例时传递给该方法,以检索 Calendar 表示的小时值。

除此之外,这两行:

gmtHour = Calendar.HOUR;
setGmtHour(gmtHour);

本质上意味着gmtHour并且gmtHourPrev将始终相等,因为您设置gmtHour等于该值,然后调用setGmtHour()which 设置gmtHourPrev为 的值gmtHour,然后设置gmtHour为传递的值(的当前值gmtHour)。

于 2012-08-04T09:16:26.237 回答
0

它工作正常;我添加了一些测试代码;你自己看:

public class Main {
    private int gmtHour;
    private int gmtHourPrev
    public int getHour() {
        return gmtHour;
    }    
    public void setGmtHour(int gHour) {
        this.gmtHourPrev = this.gmtHour;
        this.gmtHour = gHour;
    }    
    public int getGmtHourPrev() {
        return gmtHourPrev;
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.setGmtHour(5);
        System.out.println("hour set to 5");
        System.out.println("getGmtHourPrev(): " + main.getGmtHourPrev());
        System.out.println("getHour(): " + main.getHour());
        main.setGmtHour(6);
        System.out.println("hour set to 6");
        System.out.println("getGmtHourPrev(): " + main.getGmtHourPrev());
        System.out.println("getHour(): " + main.getHour());
    }
}
于 2012-08-04T09:18:51.013 回答
0

那么你使用一个值来分配,gmtHour所以你总是会得到一个值。

public String getGmtHourInfo() {
    gmtHour = Calendar.HOUR;
    setGmtHour(gmtHour);
    ....
}

如果您像这样使用它,您的代码将起作用:

    setGmtHour(Calender.HOUR+1);
    setGmtHour(Calendre.HOUR);
    ....

然后打印您会看到差异的值。

于 2012-08-04T09:27:28.340 回答