2016-12-20 54 views
-1

我遇到了這個程序從You Don't Know JS books書在GitHub上:問題與此程序

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.

我不能使它發揮作用。我開始認爲該計劃是錯誤的,但我認爲只是我。

我知道解決方案很簡單,但我不能看到它,也找不到它。

+0

在這裏和那裏添加一些'console.log'來看看發生了什麼。 – georg

+0

您是否考慮過稅(在選擇購買多少部手機時會被忽略)? – Bergi

+1

如果可能與「在你還有錢的時候繼續購買手機」評論: - ? –

回答

2

它來自您的while(amount < bank_balance)。您增加amount,直到它大於bank_balance。很顯然,這之後它大於bank_balance。另外,您可以使用每個現代瀏覽器(F12 for Chrome或Firefox將打開它們)的開發人員工具,您可以在其中放置斷點並遵循代碼的流程。

2

我不知道該程序是什麼意思是要做,但它似乎沒有多大意義,對我來說。

只要您有錢,它就會「購買」手機,但不會檢查您是否有足夠的錢購買額外的手機。 因此,在while循環結束時,您已將完全花在手機上的錢或(更可能)花費比您擁有的更多錢。

除此之外,還有附加稅和稅。所以最終你永遠無法買得起。

無論你提高你的平衡程度有多高,程序都會被寫入超過它。

的PROGRAMM將與線

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的目的可能是更好的工作。

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/ 打開瀏覽器控制檯看到的消息。

+0

附件沒有稅嗎? –

0

計劃是沒有錯的很簡單:

var bank_balance = 303.91; 

這是全球性的。假設你提供了

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

如果你檢查條件,你可以看到金額大於輸入金額。這就是爲什麼你得到「你買不起」

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

它甚至在此之前開始。他爲99.99購買第一款手機,然後爲9.99購買配件。由於'金額現在等於109.98,他購買另一個電話99.99(金額= 209.97),並沒有配件。由於他仍然有錢,他購買了99.99的第三部電話,金額達到309.96(稅前),這已經超過了他的303.91。 –

+0

檢查你在購買產品之前的循環,直到**餘額**錢大於**金額** 然後檢查**如果**條件之間while循環它也增加了您的金額和您的金額也增加了**量**的值。這是你的錯誤輸出的情況 – Sahadev