我目前正在尝试一个包括创建BankAccount系统的项目。这个系统允许你创建一个新的银行账户,在那里你可以说明它属于谁,余额等。
其中一种方法是能够从账户中提取资金。除此之外,您还可以检查账户是否透支。
对于withdraw
方法,我必须满足几个条件。以下是:
- 该值必须高于0.0,这意味着不会发生低于0的提款
- 除非账户透支,否则余额不得低于0.0
目前,我已经能够做到,所以如果数量低于0.0,该方法将返回false。如下所示:
public boolean withdraw (double amount) {
if (hasOverdraft) {
this.balance -= amount;
return true;
} else if (amount > 0.0) {
this.balance -= amount;
return true;
} else {
return false;
}
}
然而,我尝试了几种不同的方法来让它在透支的情况下工作,但似乎做不到
请记住,在最后,该方法需要能够:
- 如果金额超过0.0,允许用户取款
- 允许用户透支(例如-100(,证明他们确实透支了
可以使用以下代码检查透支:
if (hasOverdraft)
为了检查代码是否工作,我们使用以下代码:
public static void main (String[] args) {
BankAccount lewis = new BankAccount("1234", "Lewis", false);
System.out.println(lewis);
lewis.setBalance(200);
System.out.println(lewis);
lewis.withdraw(250);
System.out.println(lewis);
}
BankAccount的"false"表示该帐户没有透支。我们将用假和真来检验它。
软件中如此多的复杂性来自于试图做一件事有两件事。-Ryan Singer
您的方法基本上做两件事:
- 检查您是否可以从帐户中提款(前提条件(,如果允许透支,则情况就是这样,否则余额不会变为负数。提取的金额也应该是正数,并且不能为零(请参阅@forpas的评论(——这可能是前提条件的一部分,也可能只是之前的参数验证步骤
- 实际上在可以的时候提取资金(操作(
将这两个问题分离会使代码更加简洁,避免实际操作的复制,并允许在以后调用时将这两件事提取到单独的可重用方法中:
public boolean withdraw (double amount) {
boolean canWithdraw = amount> 0 && (hasOverdraft || balance >= amount);
if (canWithdraw ) {
balance -= amount;
}
return canWithdraw;
}
正如该问题的评论者已经指出的那样,你在前提条件上犯了一个错误(提取金额后检查金额而不是余额(。