如何在一个方法中检查多个条件并基于它执行操作's的返回值



我目前正在尝试一个包括创建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;
}

正如该问题的评论者已经指出的那样,你在前提条件上犯了一个错误(提取金额后检查金额而不是余额(。

最新更新