当前位置: 首页 > 知识库问答 >
问题:

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

娄阳舒
2023-03-14

我需要帮助在我的学校作业,我是非常新的编程。所以要求是:

类帐户,将所有数据的可见性更改为Protected。更改撤回方法,使其成为抽象方法。此操作将使您必须将类声明为抽象类。存款在OnLineAccount和SavingsAccount中的工作方式应该相同,因此确保它们不能覆盖其父版本。

OnLineAccount类与类Account的属性相比有一个附加属性minimumBalance。创建OnLineAccount的所有实例时,将minimumBalance金额设置为$500。如果任何OnLineAccount的交易导致余额低于minimumBalance,则从帐户余额中减去25美元的费用。重写ToString方法以显示帐户ToString显示的所有内容,以及取决于余额的消息。如果余额低于minimumBalance,则需要向客户发出一条消息,说明已经扣除了25美元的费用。使用父类ToString来完成大部分工作。

SavingsAccount类与Account类相比有一个附加属性透支。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得到负余额...):

共有1个答案

赫连俊悟
2023-03-14

代码中有可能出现负数。

想象一下这个在线帐户的场景。

罗伯特有3000美元。他提取了2990美元。只有10美元可兑换。

看到10美元比最低限额还少,你就分划25美元。所以罗伯特的账户上会有-15美元。

 类似资料:
  • 我试图在Woocommerce的当前子类别下显示子类别,比如这个网站。 我有2个家长类别“产品”和“部门”。然后我有一个菜单链接,可以同时访问两者。 当我在“产品”中时,我想看到子类别的图片,类别的标题,然后是所有子类别的标题和链接。 例如,父类别是“产品”,施工是子类别,密封剂 密封胶 这里有一个屏幕截图可以更好地解释它:

  • 我正在尝试开发一个消息传递应用程序,它总是抛出一个异常 类型_InternalLinkedHashMap 当我试图给信息的背景颜色。它还表明 renderflex溢出99335像素 在列表中而不是列表中使用MessageBubble时。

  • 我正在研究一个模块,在ul的侧栏中有主要类别,在子类别中有一个下拉列表。我的想法是,当我单击主类别中的任何链接时,它应该在下拉列表中显示相关的子类别,当我单击子类别时,它应该在列表视图中的下拉列表中显示下面的产品详细信息。我做了所有这些,但现在正在寻找ajax为我做这件事。 我搜索了它,但大多数情况下我都找到了主类别和子类别的下拉列表,但我不需要主类别的下拉列表。发送给我一个例子或任何链接,有这整

  • 我已经找到了一些答案,但我的问题仍然没有解决。 我刚刚制作了一个新的应用程序,发现注册页面上的错误消息根本没有显示出来。以下是我在本网站上找到的一些答案: 只需删除,'中间件'= 或 \照明\会话\中间件\开始会话::class,\照明\视图\中间件\ShareErrs From会话::class, 从受保护的$middlewareGroup到karnel中受保护的$middleware中间件。p

  • 我试图在侧边栏中显示当前页面的类别和子类别。标题应该是当前类别的名称,并链接到当前类别。我正在努力实现的一个例子可以在侧边栏中看到:https://food52.com/shop/pantry 以下是我当前的网站示例:https://farmtofrank.wpengine.com/product-category/prepared-foods/ 这是我迄今为止创建的代码: 它可以工作,但会将父链

  • 假设我有以下几点 我无法指定要在每个子类中使用的服务实现。我已经考虑过使用@Qualifier,但是我必须在每个子类中重新声明属性并在那里使用它,并且希望它覆盖父类。 这些类的目的是同时提供API的两个版本。因此,这两个版本将同时处于活动状态。 从Spring是如何注入豆子的角度来看,这确实是一种反模式,所以我对其他方法持开放态度。