我想不惜一切代价维持100余额。 请告诉我,我做错了什么?
static void withdraw(float cash){
if (balance>100)
balance=balance-cash;
System.out.println(balance);
else
(balance<=100){
System.out.println("You do not have enough balance");
}
}
答案 0 :(得分:2)
可能应该更像是:
if ((balance - cash) < 100) {
System.out.println("You do not have enough balance");
} else {
balance -= cash;
System.out.println(balance);
}
大多数教程都会从更简单的教程中构建出更复杂的想法,因此花点时间来完成这些步骤非常重要。在生产代码中,您希望从此函数返回余额,并希望删除任何冗余代码。在上面的代码中,当我们确定提款是否使余额总额低于100时,以及当我们在else语句中实际减少提款金额时,我们会有冗余代码。
如果你注意到我们实际上在这里执行了两次相同的数学运算:((balance - cash) < 100)
再次在这里:balance -= cash;
要删除它,我们可以进行一次计算并将其存储在变量中。这是必要的,因为在此操作之后我们还不知道余额是否会低于100。如果不将其存储在变量中,我们需要像我们已经做的那样重复操作,或者如果余额变得太低则在退出金额中加回,这是我们不需要做的额外操作。这看起来像这样:
balance -= cash;
if (balance < 100) {
System.out.println("You do not have enough balance");
balance += cash;
} else {
System.out.println(balance);
}
但这仍然需要一个额外的步骤 - 在我们的if语句失败的情况下添加。相反,我们可以做的是将初始减法的结果分配给临时变量,如果if条件失败,我们可以简单地将其丢弃,而无需任何额外的操作。像这样:
float tempbalance = balance - cash;
if (tempbalance < 100) {
System.out.println("You do not have enough balance");
} else {
balance = tempbalance;
System.out.println(balance);
}
这样我们就不会重复自己或做我们可以消除的额外操作。你将听到的第一个原则是干 - 重复自己。这只是意味着你不止一次重复使用相同的代码,操作,步骤或程序(这里,减法),你应该重新考虑你的代码设计,并尝试找到一种方法来使代码可重用(非常好用于函数)
最终,我认为你的教程将让你恢复平衡而不是打印它。如果它不在您当前的课程中,那么您正在学习的课程将介绍这个想法,因为在这种情况下它会使代码更清晰。例如,重构此代码我们可以编写一个看起来像这样的函数:
static float withdraw(float cash) {
float tempbalance = balance - cash;
if (tempbalance < 100) {
return balance;
} else {
return tempbalance;
}
}
我们可能会创建一个如下所示的附加功能:
static void makeWithdraw(float cash) {
if (balance == (balance = makeWithdraw(cash))) {
System.out.println("You do not have enough balance");
} else {
System.out.println(balance);
}
}
通过这种设计,我们可以随时调用makeWithdraw()来向用户输出是否有足够的资金进行撤销,或者撤回后的余额。我们也可以自由地在我们的代码中的其他任何地方重用我们的withdraw()函数,我们需要提取,但不想打印这些消息。这也解决了重复代码的问题,并且是一种盲目地在天平上执行操作的安全方式,而不用担心它会以我们不期望的方式进行修改。
希望这更清楚。请注意,在makeWithdraw()函数中,我们必须按此顺序(balance == (balance = withdraw(cash)))
进行比较,并在单独的括号内使用赋值语句(balance = withdraw(cash))
。如果您反转订单,您会发现我们总是被告知我们没有足够的余额,因为我们在进行比较之前修改了余额值,每次都会产生真正的评价。如果我们没有正确封装赋值语句,Java将无法正确解释我们的意思。
希望这有助于让您的课程更轻松。这里的代码全部在一个类中,它们将这些函数分开,这样你就可以把它看作一个整体:
public class BalanceTutorial {
static float balance = 300;
public static void main(String[] args) {
makeWithdraw(100);
makeWithdraw(100);
makeWithdraw(1);
}
static float withdraw(float cash) {
float tempbalance = balance - cash;
if (tempbalance < 100) {
return balance;
} else {
return tempbalance;
}
}
static void makeWithdraw(float cash) {
if (balance == (balance = withdraw(cash))) {
System.out.println("You do not have enough balance");
} else {
System.out.println(balance);
}
}
}
答案 1 :(得分:0)
就像这样
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/1.17.0/TweenMax.min.js"></script>
<p id="colorize">Test color paragraph</p>