如何使用类中的静态变量来更新另一个类中的非静态实例变量?

时间:2015-04-20 16:15:49

标签: java variables static

您好我正在做这项功课,它几乎已经完成,但有一件事不能正常工作。我创建了这两个类“SavingAccount”和“TimeAccount”,“Account”的子类,它们有不同类型的兴趣计算,包括帐户上次更新的当前时间和时间。我有一个时间变量,它被建模为几个月,并在我的Test类中声明为零。每当我存款,取款或转账时,它应该更新账户lastTimeUpdated变量并使其等于currentMonth。这是我的测试课:

public class Test {

    public static int month = 0;

    static void click(){
        month++;
        System.out.println("Current month is " + month);
    }

    static void click(int x){
        month += x;
        System.out.println("Current month is " + month);
    }


    public static void main(String[] args) {

        Customer ali = new Customer("Ali");
        Customer veli = new Customer("Veli");
        Customer elif = new Customer("Elif");

        click();

        Account savingAccount1 = new SavingAccount(ali, garanti, 3);
        Account timeAccount1 = new TimeAccount(elif, akbank);

        click();

        savingAccount1.deposit(500);
        timeAccount1.deposit(400);

        click(5);

        System.out.println(savingAccount1.getLastUpdate());
        System.out.println(timeAccount1.getLastUpdate());


    }


}

在输出中它表示他们最后一次更新仍然是1虽然我调用了click()方法几次并存入了一些钱。

这是我的存款方法,它应该将其lastUpdated变量更改为currentTime,但它不会。

public abstract class Account {

    protected int currentTime = Test.month;
    protected int timeUpdated;

    public abstract double getBalance();

    public void deposit(double amount){
        balance = this.getBalance();
        balance += amount;
        timeUpdated = currentTime;
    }
}

这是每个子类的getBalance()方法,因为它们具有不同类型的兴趣计算:

public class SavingAccount extends Account {

    private final int term;
    private static int number = 1;
    private final double interestRate = 0.2;

    public SavingAccount(Customer c, Bank b, int t){
        super(c, b, 0, number);
        term = t;
        number++;   
    }

    @Override
    public double getBalance() {
        double a = (1+term*interestRate/12);
        double b = (currentTime-timeUpdated)/term;
        balance = balance*Math.pow(a,b);
        return balance;
    }

}

public class TimeAccount extends Account {

    private static int number = 1;
    private final double interestRate = 0.1;

    public TimeAccount(Customer c, Bank b){
        super(c, b, 1, number);
        number++;   
    }

    public double getBalance(){
        double a = 1+interestRate/12;
        double b = currentTime-timeUpdated;
        balance = balance*Math.pow(a,b);
        return balance;
    }

}

我知道这很长但我试图说清楚问题的位置,而我的另一个问题被标记为“重复”,但我找不到答案。

所以我的程序不会更新lastUpdated时间,这就是为什么兴趣不会起作用的原因。提前谢谢。

3 个答案:

答案 0 :(得分:1)

分配静态变量不会不断更新。

protected int currentTime = Test.month;

这会将currentTime的值设置为Test.month创建时的Account。如果您想要更改它,您必须更新它。

答案 1 :(得分:1)

看起来你只是在初始化它时才设置currentTime,所以一旦创建了Account对象,它的currentTime就会被修复,并且不会随着Test.month更改而更新。

答案 2 :(得分:0)

您只需分配currentTime一次(在实例化时)。更新Test.month时,它不会自动更新。您需要一种机制来更新每个Account实例中的时间,并在您调用click的每个位置调用它。实际上,Test.month成员并不是特别有用。