2016-01-23 1 views
-1

J'ai obtenu un script simple qui fonctionne très bien: Comment l'instruction "while" dans JavaScript évalue-t-elle la variable décrémentée?

var PHONE_PRICE = 20.5, 
 
    ACCESSORIES_PRICE = 12.2, 
 
    TAX_RATE = 0.098, 
 
    THRESHOLD = 30, 
 
    MIN_PURCHASE = taxed(PHONE_PRICE, TAX_RATE); 
 

 
var balance = prompt("your balance"), phoneQt = 0, accessoriesQT = 0; 
 

 
function taxed(purchase, tax) { 
 
    return purchase * (1 + tax); 
 
} 
 

 
/* 
 
* If the amount of total purchase exceed the balance, 
 
* the buying stops. 
 
*/ 
 

 
// MIN_PURCHASE prevent the buying to reduce your balance to negative value, as in -$20 
 
while (true) { 
 
    if (balance < MIN_PURCHASE) { 
 
     break; 
 
    } 
 
    
 
    balance -= taxed(PHONE_PRICE, TAX_RATE); 
 
    ++phoneQt; 
 
    if (balance >= THRESHOLD) { 
 
     balance -= taxed(ACCESSORIES_PRICE, TAX_RATE); 
 
     ++accessoriesQT; 
 
    } 
 
} 
 

 
console.log("You've bought " + (phoneQt + accessoriesQT) + " item"); 
 
console.log("And your balance is $" + balance.toFixed(2));

Si le solde est de 100, le résultat est:

You've bought 4 item 
And your balance is $9.96 

Mais, j'ai un résultat inattendu lorsque je change l'instruction while comme ceci:

while (balance > MIN_PURCHASE) { 
    balance -= taxed(PHONE_PRICE, TAX_RATE); 
    phoneQt++; 
    if (balance >= THRESHOLD) { 
     balance -= taxed(ACCESSORIES_PRICE, TAX_RATE); 
     accessoriesQT++; 
    } else { 
     break; 
    } 
} 

le résultat est que j'ai:

You've bought 1 item 
And your balance is $77.49 

Je pense qu'il y a un problème dans l'évaluation de l'instruction while mais je ne sais pas comment.

+0

En fait, vos deux exemples fonctionnent très bien, au moins sur Firefox, et les deux donnent * Vous avez acheté 5 article et votre solde est 5,68 $ * Dans quel navigateur/environnement avez-vous tester? – rpadovani

+0

@rpadovani Google chrome – user3660139

+0

Non, le 2ème code est erroné, il ne vous permet pas d'acheter le dernier article, alors que cela coûterait exactement le montant que vous avez dans la balance. Cependant, tous les résultats que vous avez publiés n'ont aucun sens à partir du code et des valeurs de votre question – Gavriel

Répondre

0

Essayez> = au lieu de>

while (balance >= MIN_PURCHASE) { 
    balance -= taxed(PHONE_PRICE, TAX_RATE); 
    ++phoneQt; 
    if (balance >= THRESHOLD) { 
     balance -= taxed(ACCESSORIES_PRICE, TAX_RATE); 
     ++accessoriesQT; 
    } 
} 
+0

rien n'a changé – user3660139

+0

lorsque j'ai exécuté votre code dans mon navigateur avec un solde de départ de 100 J'ai: Vous avez acheté 5 articles. Et votre solde est de 5,68 $. Et j'ai eu exactement les mêmes résultats avec mon code – Gavriel

+0

J'utilise extrait dans Google Chrome – user3660139

0

Dans le premier cas, vous continuez à acheter des téléphones, même dans le solde est inférieur au seuil. Dans le second code, vous vous arrêtez complètement une fois que vous décidez de ne pas acheter un accessoire. Essayez de supprimer la clause else. Quoi qu'il en soit, dans les deux exemples le résultat est le même - vous achetez 5 articles. Mais encore vous devriez enlever la partie d'autre.

+0

le premier cas est ce que j'ai l'intention de faire. – user3660139