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

Printing balance, What m i doing wrong?

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

    }
}

可能应该更像:

if ((balance - cash) < 100) {
    System.out.println("You do not have enough balance");
} else {
    balance -= cash;
    System.out.println(balance);
}

大多数教程都会从简单的想法构建更复杂的想法,因此花时间完成这些步骤很重要。在生产代码中,您希望 return 此函数的余额,并希望删除任何冗余代码。在上面的代码中,我们在判断取款是否使余额总数低于 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——不要重复自己。这只是意味着任何时候您多次重复使用相同的代码、操作、步骤或过程(这里是减法),您应该重新考虑您的代码设计并尝试找到一种方法使该代码可重复使用(对函数的一个很好的使用) .

最终我认为您的教程会让您 return 结余而不是打印出来。如果它不在您当前的课程中,那么在您正在学习的课程中的某个时候将介绍这个想法,因为在这种情况下它会产生更清晰的代码。例如,重构这段代码,我们可以编写一个如下所示的函数:

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将无法正确解释我们的意思。

希望这对您有所帮助并使您的课程更轻松。这是将这些函数单独分开的 class 中的所有代码,因此您可以将其视为一个整体:

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

}

就这样放

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