-1

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

    }
}
4

2 回答 2

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);
}

这样我们就不会重复自己或做我们可以消除的额外操作。你会听到重复的第一个原则 DRY - 不要重复自己。这只是意味着任何时候你多次重复使用相同的代码、操作、步骤或过程(这里是减法),你应该重新考虑你的代码设计并尝试找到一种方法来使该代码可重复使用(对函数来说非常好用) .

最终我认为你的教程会让你退还余额而不是打印它。如果您当前的课程中没有,则在某些时候您正在学习的课程将介绍这个想法,因为在这种情况下它可以使代码更清晰。例如,重构这段代码,我们可以编写一个如下所示的函数:

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);
        }
    }

}
于 2015-09-03T12:16:03.003 回答
0

就这样放

    int cash = 10;
    int balance = 100;
    if (balance-cash>100){  
        balance=balance-cash;
        System.out.println(balance);
    }else
        System.out.println("You do not have enough balance");
    }
于 2015-09-03T12:16:45.527 回答