该计划的问题

时间:2016-12-20 09:22:24

标签: javascript function

我从github上的一本You Don't Know JS books书中看到了这个程序:

const SPENDING_THRESHOLD = 200;
const TAX_RATE = 0.08;
const PHONE_PRICE = 99.99;
const ACCESSORY_PRICE = 9.99;

var bank_balance = 303.91;
var amount = 0;

function calculateTax(amount) {
    return amount * TAX_RATE;
}

function formatAmount(amount) {
    return "$" + amount.toFixed( 2 );
}

// keep buying phones while you still have money
while (amount < bank_balance) {
    // buy a new phone!
    amount = amount + PHONE_PRICE;

    // can we afford the accessory?
    if (amount < SPENDING_THRESHOLD) {
        amount = amount + ACCESSORY_PRICE;
    }
}

// don't forget to pay the government, too
amount = amount + calculateTax( amount );

console.log(
    "Your purchase: " + formatAmount( amount )
);
// Your purchase: $334.76

// can you actually afford this purchase?
if (amount > bank_balance) {
    console.log(
        "You can't afford this purchase. :("
    );
}
// You can't afford this purchase. :(

我的问题是,如果我将bank_balance的值更改为更高的值,但它会保持打印无关紧要:You can't afford this purchase.

我已尝试制作它,因此无法打印:You can't afford this purchase.

我不能让它发挥作用。我开始认为该计划是错误的,但我认为只是我。

我知道解决方案很简单,但我看不到它,也找不到它。

4 个答案:

答案 0 :(得分:2)

它来自您的while(amount < bank_balance)。您增加amount,直到它大于bank_balance。很明显,之后它比bank_balance大。

此外,您可以使用每个现代浏览器中提供的开发人员工具(适用于Chrome或Firefox的F12将打开它们),您可以在其中放置断点并遵循代码流程。

答案 1 :(得分:2)

我不知道该程序意味着要做什么,但它似乎对我没有多大意义。

只要您有钱,它就会“购买”手机,但不会检查您是否有足够的钱购买额外的手机。 因此,在while循环结束时,您已将全部资金用于手机或(更有可能)花费更多的钱。

除此之外还有配饰和税收。所以最后,你将无法负担购买的费用。

无论你提高平衡程度有多高,程序都会超过它。

使用

行可以更好地使用该程序
while (amount + PHONE_PRICE + calculateTax(amount + PHONE_PRICE) <= bank_balance)

甚至

while (amount + PHONE_PRICE + ACCESSORY_PRICE + calculateTax(amount + PHONE_PRICE + ACCESSORY_PRICE)<= bank_balance)

虽然我不得不承认我不确定SPENDING_THRESHOLD的目的是什么。

答案 2 :(得分:1)

您不断添加新手机和配件,直至达到总金额。我估计总成本会非常接近金额,因此当您添加税额时,它会越过极限并且您会看到该消息。我建议你比较(在while循环中)手机价格和税收。类似的东西:

while (amount + PHONE_PRICE + calculateTax( PHONE_PRICE ) < bank_balance) {
    // buy a new phone!
    amount = amount + PHONE_PRICE + calculateTax( PHONE_PRICE );

    // can we afford the accessory?
    if (amount < SPENDING_THRESHOLD) {
        amount = amount + ACCESSORY_PRICE;
    }
}

参考https://jsfiddle.net/Lxwscbbq/ 打开浏览器控制台以查看消息。

答案 3 :(得分:0)

程序没错,很简单:

var bank_balance = 303.91;

是全球性的。假设你提供了

amount = 200;
amount = amount + calculateTax( amount );
amount = 200 + calculateTax(200);

如果您检查条件,您可以看到金额大于输入金额。这就是为什么你会得到&#34;你买不起&#34;

if (amount > bank_balance) {
    console.log(
        "You can't afford this purchase. :("
    );
}