您好我正在做这项功课,它几乎已经完成,但有一件事不能正常工作。我创建了这两个类“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时间,这就是为什么兴趣不会起作用的原因。提前谢谢。
答案 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成员并不是特别有用。