Java 无法识别addInterest()

Java 无法识别addInterest(),java,bank,Java,Bank,我正在尝试创建银行帐户,但我的addInterest()函数不起作用。它似乎不认识我的功能。它并没有像应该的那样在余额上增加利息。我认为计算根本没有发生。我已尝试修改AddInTest(),但无效。我不明白怎么了。任何帮助都将不胜感激 package lab2; import java.util.*; import java.io.*; public class Account { protected String accName; protected Double bala

我正在尝试创建银行帐户,但我的addInterest()函数不起作用。它似乎不认识我的功能。它并没有像应该的那样在余额上增加利息。我认为计算根本没有发生。我已尝试修改AddInTest(),但无效。我不明白怎么了。任何帮助都将不胜感激

package lab2;
import java.util.*;
import java.io.*;

public class Account {

    protected String accName;
    protected Double balance;

    public Account(String name, double initDeposit) {
        accName = name;
        balance = initDeposit;
    }

    public String getAccountName() {
    return accName;
    }

    public double getBalance() {
    return balance;
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public void withdraw(double amount) {
        int fee = 6;
        if (balance < 100) {
            amount += fee;
            balance -= amount;
        }   
        else if (amount > balance) {
            double limit = -50;
            if (balance > limit)
                balance = limit;

        }
        else
            balance -= amount;

    }

    public String toString() {
        return accName + ' ' + balance;
    }

    public static class CurrentAccount extends Account {

        final static double DEFAULT_LIMIT = -50;
        double limit = DEFAULT_LIMIT;

        public CurrentAccount(String name, double i) {
            super(name, i);
        }

        public void withdraw(double amount) {
            double fee = 6;

            if (balance < 100) {
                amount += fee;
                balance -= amount;
            }
            if (amount > balance) {
                double res;
                res = balance - amount;

                if (res > -50) 
                    res = limit;
            }

            balance -= amount;

        }

        public void deposit(double amount) {
            balance += amount;
        }

        public String toString() {
            return accName + ' ' + balance;
        }

    }

    public static class DepositAccount extends Account {

        final static double DEFAULT_INTEREST = 0.04;
        double interestRate = DEFAULT_INTEREST;

        public DepositAccount(String name, double i) {
            super(name, i);
        }

        public void withdraw(double amount) {
            balance -= amount;
        }

        public void deposit(double amount) {
            balance += amount;
            addInterest(balance);
        }

        public double addInterest(double bal) {
            return (bal*interestRate)+bal;
        }

        public String toString() {
            return accName + ' ' + balance;
        }

    }

    public static class HigherRateAccount extends Account {

        final static double DEFAULT_INTEREST = 0.07;
        double interestRate = DEFAULT_INTEREST;

        public HigherRateAccount(String name, double i) {
            super(name, i);
        }

        public void withdraw(double amount) {
            double fee;
            fee = 10;

            double feeFixed = amount + fee;
            balance += feeFixed;
        }

        public double addInterest(double bal) {
            return (bal*interestRate)+bal;
        }

        public void deposit(double amount) {
            balance += amount;
            addInterest(balance);
        }

        public String toString() {
            return accName + ' ' + balance;
        }
    }


     public static void main(String[] args) {
        Account arthur = new CurrentAccount("Arthur", 200);
        Account brenda = new DepositAccount("Brenda", 70);
        Account charlie = new HigherRateAccount("Charlie", 1000);
        System.out.println(arthur);
        System.out.println(brenda);
        System.out.println(charlie);
        arthur.withdraw(50);
        brenda.withdraw(50);
        charlie.deposit(1000);
        System.out.println(arthur);
        System.out.println(brenda);
        System.out.println(charlie);
        arthur.withdraw(175);
        brenda.deposit(90);
        charlie.withdraw(3000);
        System.out.println(arthur);
        System.out.println(brenda);
        System.out.println(charlie);
        }


    }
lab2包装;
导入java.util.*;
导入java.io.*;
公共类帐户{
受保护的字符串名称;
保护双重平衡;
公共帐户(字符串名称,双初始存款){
accName=名称;
余额=初始存款;
}
公共字符串getAccountName(){
返回帐户名;
}
公共双getBalance(){
收益余额;
}
公共作废保证金(双倍金额){
余额+=金额;
}
公开作废取款(双倍金额){
国际费用=6;
如果(余额<100){
金额+=费用;
余额-=金额;
}   
否则如果(金额>余额){
双限=-50;
如果(余额>限额)
余额=限额;
}
其他的
余额-=金额;
}
公共字符串toString(){
返回accName+“”+余额;
}
公共静态类CurrentAccount扩展帐户{
最终静态双默认值_限制=-50;
双重限制=默认限制;
公共CurrentAccount(字符串名称,双i){
超级(姓名,i);
}
公开作废取款(双倍金额){
双倍费用=6;
如果(余额<100){
金额+=费用;
余额-=金额;
}
如果(金额>余额){
双res;
res=余额-金额;
如果(res>-50)
res=极限;
}
余额-=金额;
}
公共作废保证金(双倍金额){
余额+=金额;
}
公共字符串toString(){
返回accName+“”+余额;
}
}
公共静态类存款帐户扩展帐户{
最终静态双默认利息=0.04;
双重利息=默认利息;
公共存款账户(字符串名称,双i){
超级(姓名,i);
}
公开作废取款(双倍金额){
余额-=金额;
}
公共作废保证金(双倍金额){
余额+=金额;
额外利息(余额);
}
公共双附加测试(双bal){
收益(bal*利率)+bal;
}
公共字符串toString(){
返回accName+“”+余额;
}
}
公共静态类HigherRateAccount扩展帐户{
最终静态双违约利息=0.07;
双重利息=默认利息;
公共HigherRateAccount(字符串名称,双i){
超级(姓名,i);
}
公开作废取款(双倍金额){
双倍收费;
费用=10;
双费固定=金额+费用;
平衡+=固定;
}
公共双附加测试(双bal){
收益(bal*利率)+bal;
}
公共作废保证金(双倍金额){
余额+=金额;
额外利息(余额);
}
公共字符串toString(){
返回accName+“”+余额;
}
}
公共静态void main(字符串[]args){
账户亚瑟=新的活期账户(“亚瑟”,200);
账户布伦达=新存款账户(“布伦达”,70);
账户查理=新的高级账户(“查理”,1000);
系统输出打印(arthur);
系统输出打印(布伦达);
系统输出打印(查理);
撤回(50);
布伦达:撤回(50);
查理:存款(1000);
系统输出打印(arthur);
系统输出打印(布伦达);
系统输出打印(查理);
亚瑟.撤回(175);
布伦达存款(90);
查理,撤回(3000);
系统输出打印(arthur);
系统输出打印(布伦达);
系统输出打印(查理);
}
}
问题在于:

    public void deposit(double amount) {
        balance += amount;
        addInterest(balance);
    }
Add interest返回一个值,但从不使用该值。你应该这样做

 balance = addInterest(balance);

相反(可能,我认为您已经在AddInest函数中添加了余额)。

您正在从
AddInest
返回一个值,但在调用该值的方法中,您没有对返回的数字执行任何操作。你只要打电话


因此,
addInterest
返回新的余额,但该值没有分配到余额的任何位置。

如果您说1,您的问题更容易理解。这是我的意见。2.下面是我对输出3的期望。下面是实际发生的情况