Java 向构造函数属性添加静态属性

Java 向构造函数属性添加静态属性,java,static,Java,Static,问题如下: (储蓄账户类)创建储蓄账户类。使用静电计 可变年利率存储所有人的年利率 账户持有人。类的每个对象都包含一个私有实例 变量savingsBalance,指示当前储蓄的金额 存款。提供方法calculateMonthlyInterest来计算 将储蓄余额乘以 年利率除以12,该利息应加上 储蓄余额。提供一个静态方法modifyInterestRate,用于设置 将年度利率调整为新值。编写一个测试类的程序 储蓄账户。实例化两个savingsAccount对象saver1和savingsAc

问题如下:

(储蓄账户类)创建储蓄账户类。使用静电计 可变年利率存储所有人的年利率 账户持有人。类的每个对象都包含一个私有实例 变量savingsBalance,指示当前储蓄的金额 存款。提供方法calculateMonthlyInterest来计算 将储蓄余额乘以 年利率除以12,该利息应加上 储蓄余额。提供一个静态方法modifyInterestRate,用于设置 将年度利率调整为新值。编写一个测试类的程序 储蓄账户。实例化两个savingsAccount对象saver1和savingsAccount 储蓄2,余额分别为2000.00美元和3000.00美元。设置 年利率定为4%,然后计算每个月的月利率 打印两个储户的新余额。接下来,设置 年利率为5%,计算下个月的利息和 打印两个储户的新余额

我解决了所有问题,但余额并没有增加,而是保持不变。它应该随着年利率的每一次变化而增加(至少,这是我所理解的)


您没有在此代码中修改
savingsBalance
的值

public double addMonthlyInterest()     {    
  savingsBalance += (savingsBalance*annualInterestRate)/12;
  return savingBalance;     
}  

这将在您的第一个打印对账单中返回新余额和“增量”

,对于第一个参数,您是在计算月利息并将其相加后计算余额的,并且没有将新值设置为类成员储蓄余额的值

在第二个print语句中,由于您没有通过setter将计算值设置回类成员,因此它只是打印出类实例化时使用的原始值


另一方面,不要在print语句中进行内联计算。它们让人困惑,对任何人来说都不容易阅读。一个好方法是初始化方法中的本地成员,并使用它们进行计算和打印本地成员。

只是想分享我的答案

公共类储蓄帐户{

private static float annualInterestRate = 0f;
private float savingsBalance;

public SavingsAccount(float balance) {
    savingsBalance = balance;
}

public static void setAnnualInterestRate(float t) {
    if (t >= 0 && t <= 1)
        annualInterestRate = t;
    else
        throw new IllegalArgumentException("Annual interest rate should be between 0 and 1");
}

private float calculateMonthlyInterest() {
    return savingsBalance * annualInterestRate / 12;
}

public float getSavingsBalance() {
    return savingsBalance + calculateMonthlyInterest();
}

public float getAnnualInterestRate(){
    return annualInterestRate;
}

public String toString() {
    return String.format("Balance: %.2f", getSavingsBalance());
}

我不认为改变利率应该改变账户余额。如果这是你唯一的问题,我认为这是正确的。你的一个代码实际上修改了
savingBalance
变量(构造函数除外)。你必须在某个地方更改值,我不知道你想在哪里更改。顺便说一句,你的格式/命名约定不好。假设这是hw,你可能会失去样式的分数。请至少修复标题。我确信这不是讲师使用的术语!我这样做时不应该更改平衡吗?公共储蓄账户(双倍余额){savingsBalance=balance+calculateMonthlyInterest();}
private static float annualInterestRate = 0f;
private float savingsBalance;

public SavingsAccount(float balance) {
    savingsBalance = balance;
}

public static void setAnnualInterestRate(float t) {
    if (t >= 0 && t <= 1)
        annualInterestRate = t;
    else
        throw new IllegalArgumentException("Annual interest rate should be between 0 and 1");
}

private float calculateMonthlyInterest() {
    return savingsBalance * annualInterestRate / 12;
}

public float getSavingsBalance() {
    return savingsBalance + calculateMonthlyInterest();
}

public float getAnnualInterestRate(){
    return annualInterestRate;
}

public String toString() {
    return String.format("Balance: %.2f", getSavingsBalance());
}
    SavingsAccount s1 = new SavingsAccount(2000);
    SavingsAccount s2 = new SavingsAccount(3000);
    SavingsAccount.setAnnualInterestRate(0.04f);

    System.out.println("S1: " + s1);
    System.out.println("S2: " + s2);

    SavingsAccount.setAnnualInterestRate(0.05f);
    System.out.println("S1: " + s1);
    System.out.println("S2: " + s2);