打印平衡,我做错了什么?

时间:2015-09-03 12:11:30

标签: java account bank

我想不惜一切代价维持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");

    }
}

2 个答案:

答案 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>