需要我学校工作的帮助,我对编程非常陌生。所以要求是:
类帐户,将所有数据的可见性更改为受保护。更改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正在产生负余额......):
答案 0 :(得分:0)
您的代码中可能存在负数。
想象一下使用在线帐户的情况。
罗伯特有3000美元。他退出了2990美元。剩下只有10美元。看到10美元低于最低金额,你减去25美元。 罗伯特将在他的账户上获得-15美元。
答案 1 :(得分:0)
谢谢你们的帮助。它现在可以完美地显示出现的所有错误消息。我在getBalance()之后添加了toString(),正如J Richard Snape建议的那样,现在一切正常。
正如理查德所说,getBalance()绕过了所有警告。
立即输出:
答案 2 :(得分:0)
可能会产生负数,因为您所设定的界限要比该人最初存入的一些额度高。
通过在代码段中进行充值和提现,您可以提取一个导致该人的余额为负的金额。
accountArray[i].withdrawl(ran.nextInt(3000
));