需要帮助我的学校工作,我对编程非常陌生.所以要求是:
类帐户,将所有数据的可见性更改为受保护.更改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);
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我花了好几个小时没运气.任何帮助将非常感激.谢谢.这是我在此的头一篇博文.
我得到的输出是(帐号12350正在得到负余额......):

您的代码中可能存在负数。
用在线帐户想象一下这个场景。
罗伯特有 3000 美元。他提取了2990美元。只剩下10块钱了。
看到 10 美元比最低金额少,你减去 25 美元。因此罗伯特的账户上将有 -15 美元。