具有2个子类的银行帐户类未显示相应的错误消息

时间:2015-03-23 12:30:56

标签: java class

需要我学校工作的帮助,我对编程非常陌生。所以要求是:

  

类帐户,将所有数据的可见性更改为受保护。更改withdraw方法,使其成为一个抽象方法。此操作将需要您将类声明为抽象。存款在OnLineAccount和SavingsAccount中应该以相同的方式工作,因此请确保它们不能覆盖其父版本。

     

OnLineAccount类有一个属于Account,minimumBalance类的附加属性。创建OnLineAccount的所有实例时,minimumBalance数量设置为$ 500。如果任何OnLineAccount的交易导致余额低于minimumBalance,则从账户余额中扣除25美元的费用。覆盖toString方法以显示帐户toString显示的所有内容以及取决于余额的消息。如果余额低于minimumBalance,则表明已经减去25美元费用的消息需要提醒客户。使用父类toString完成大部分工作。

     

SavingsAccount类有一个额外的属性,类Account,overdraft。所有SavingsAccount实例都是在透支金额设置为 - $ 1000的情况下创建的。透支金额是SavingsAccount类的对象可以允许余额转到的金额。实施撤销方法,以便允许透支达到透支中存储的金额。任何允许余额低于零并且高达透支金额的提款都是允许的,但每次交易导致余额低于零时,都会产生30美元的透支费用。   覆盖toString方法以显示帐户toString的所有内容   显示加上取决于余额的消息。如果余额低于零,则表明该人已透支并且已经支付了30美元的费用。使用父类toString完成大部分工作。

     

创建一个包含5个Account对象的数组的驱动程序类,它是子类OnLineAccount或SavingsAccount的一些实例。系统地测试两个子类的完整功能。

================================

所以我创建了4个类文件,它显示所有帐户信息,但也显示负余额,这应该是错误消息,而不是因为余额不应低于500美元。

以下是我的班级文件:

帐户类:

    import java.text.NumberFormat;
    import java.util.Locale;

    public abstract class Account {

    private static int defaultAccountNo = 12345;
    protected String owner;
    protected int accountNo;
    protected double balance;

    protected Account(String owner, double intialDeposit){
        this.owner = owner;
        this.balance = intialDeposit;
        defaultAccountNo++;
        this.accountNo = defaultAccountNo;
    }

    public final boolean deposit(double amount){
        if(amount<=0){
            System.err.println("Negative amount can't be deposited");
            return false;
        }
        balance = balance+amount;
        return true;
    }

    protected abstract boolean withdrawl(double amount);

    public String getBalance(){
        return formatter.format(balance);
    }
    public int getAccountNo(){
        return accountNo;
    }

    public void setOwner(String owner){
        this.owner = owner;
    }

    protected void addInterest(){
        double interest = 0.05*balance;
        balance = balance+interest;
    }

    public boolean equals(Account account){
        if(this.owner.equalsIgnoreCase(account.owner))
            return true;
        else
            return false;
    }

    NumberFormat formatter = NumberFormat.getCurrencyInstance();

    public String toString(){
        return "AccountNo: "+accountNo+"\nBalance: "+formatter.format(balance);
     } 


   }

OnlineAccount类:

public class OnLineAccount extends Account{

public OnLineAccount(String owner, double intialDeposit) {
    super(owner, intialDeposit);
}

private static final double MINIMUM_BALANCE = 500;


public boolean withdrawl(double amount){
    if(amount<0){
        System.err.println("Negative amount cannot be withdrawn");
        return false;
    }
    if((balance-amount)<0){
        System.err.println("Not enought balance");
        return false;
    }
    balance = balance-amount;
    if(balance<MINIMUM_BALANCE)
        balance = balance - 25;
    return true;
}

public String toString(){
    String returnString;
    if(balance<500){
        returnString = super.toString()+"\n$25 fee has been already been subtracted as account balance reached below minimum";
        return returnString;
    }
    return super.toString();

  }


}

SavingsAccount类:

 public class SavingsAccount extends Account{

    private static final double DEFAULT_OVERDRAFT = -1000;

    public SavingsAccount(String owner, double intialDeposit) {
        super(owner, intialDeposit);
    }

    public boolean withdrawl(double amount) {
        if(amount<0){
            System.err.println("Negative amount cannot be withdrawn");
            return false;
        }
        if((balance-amount-30)<DEFAULT_OVERDRAFT){
            System.err.println("Not enough balance, overdraft reached");

        }
        if((balance-amount)<0){
            balance = balance-amount-30;
            return true;
        }
        return false;
    }

    public String toString(){
        String returnString;
        if(balance<500){
            returnString = super.toString()+"\nYour are in overdraft and $30 fee has been already been subtracted.";
            return returnString;
        }
        return super.toString();

      }

   }

TestAccount类:

    import java.util.Random;
    public class TestAccount {

    public static void main(String[] args) {

        Random ran = new Random();

        Account[] accountArray = new Account[5];
        Account acc1 = new OnLineAccount("Bill", 1000);
        Account acc2 = new OnLineAccount("Susan", 1500);
        Account acc3 = new SavingsAccount("William", 2500);
        Account acc4 = new SavingsAccount("Bill", 9000);
        Account acc5 = new SavingsAccount("Bruce", 1355);

        accountArray[0] = acc1;
        accountArray[1] = acc2;
        accountArray[2] = acc3;
        accountArray[3] = acc4;
        accountArray[4] = acc5;

        for(int i=0; i<accountArray.length; i++){
            System.out.println("Initial details of Account....");
            System.out.println(accountArray[i]);
            System.out.println("After some transactions..");
            accountArray[i].deposit(ran.nextInt(300));
            accountArray[i].withdrawl(ran.nextInt(3000
   ));
            System.out.println("Balance: "+accountArray[i].getBalance());
            System.out.println("After adding the interest for the year....");
            accountArray[i].addInterest();
            System.out.println("Balance: "+accountArray[i].getBalance());
            System.out.println(); // for blank line
        }

        System.out.println("Checking for Duplicates now....");
        for(int i=0; i<accountArray.length; i++){
            for(int j=0; j<i; j++){
                if(accountArray[i].equals(accountArray[j])){
                    System.out.println("Account "+accountArray[i].getAccountNo()+
                            " and "+accountArray[j].getAccountNo()+" are duplicates");
                }
            }
          }

       }

    }

我花了好几个小时没运气。任何帮助将非常感激。谢谢。 这是我在这里的第一篇文章。

我得到的输出是(账号12350正在产生负余额......):

Account no 12350 is getting negative balance...

3 个答案:

答案 0 :(得分:0)

您的代码中可能存在负数。

想象一下使用在线帐户的情况。

罗伯特有3000美元。他退出了2990美元。剩下只有10美元。

看到10美元低于最低金额,你减去25美元。 罗伯特将在他的账户上获得-15美元。

答案 1 :(得分:0)

谢谢你们的帮助。它现在可以完美地显示出现的所有错误消息。我在getBalance()之后添加了toString(),正如J Richard Snape建议的那样,现在一切正常。

正如理查德所说,getBalance()绕过了所有警告。

立即输出:

enter image description here

答案 2 :(得分:0)

可能会产生负数,因为您所设定的界限要比该人最初存入的一些额度高。

通过在代码段中进行充值和提现,您可以提取一个导致该人的余额为负的金额。

accountArray[i].withdrawl(ran.nextInt(3000
            ));