2009-11-22 5 views
1

Supposons qu'un parking facture des frais minimums de 2 $ pour se garer jusqu'à 3 heures, alors le parking facture 0,5 $ de plus par heure pour chaque heure. Par exemple, stationner pour 5 heures facturer 2 $ + 0,5 $ + 0,5 $ = 3 $Javascript - Comment devrais-je calculer l'utilisation du résultat pour la boucle?

Comment devrais-je calculer l'utilisation des frais pour la boucle?

+0

Je ne sais pas vraiment de quoi parle votre question. Pourriez-vous élaborer un peu? – roosteronacid

Répondre

5

Il n'y a pas besoin d'utiliser une boucle for:

function calculateFee(hours) { 
    if (isNaN(hours) || hours <= 0) return 0; 
    if (hours <= 3) return 2; 
    var additionalHours = Math.round(hours - 3); 
    return 2 + 0.5 * additionalHours; 
} 

var fee = calculateFee(5); 

Et si vous utilisez une boucle for est une exigence:

function calculateFee(hours) { 
    if (isNaN(hours) || hours <= 0) return 0; 
    var result = 2; 
    if (hours <= 3) return result; 
    var additionalHours = Math.round(hours - 3); 
    for (i = 0; i < additionalHours; i++) { 
     result += 0.5;   
    } 
    return result; 
} 

Et enfin un exemple en utilisant des objets:

function FeeCalculator(minimalFee, initialHours, additionalHourFee) { 
    if (isNaN(minimalFee) || minimalFee <= 0) { throw "minimalFee is invalid"; } 
    if (isNaN(initialHours) || initialHours <= 0) { throw "initialHours is invalid"; } 
    if (isNaN(additionalHourFee) || additionalHourFee <= 0) { throw "additionalHourFee is invalid"; } 
    this.minimalFee = minimalFee; 
    this.initialHours = initialHours; 
    this.additionalHourFee = additionalHourFee; 
} 

FeeCalculator.prototype = { 
    calculateFee: function(hours) { 
     if (hours <= this.initialHours) return this.minimalFee; 
     var additionalHours = Math.round(hours - this.initialHours); 
     return this.minimalFee + this.additionalHourFee * additionalHours;   
    } 
}; 

var calculator = new FeeCalculator(2, 3, 0.5); 
var fee = calculator.calculateFee(5); 
0

Peut être comme ça, désolé Si c'est faux, parce que je ne l'ai pas testé.

fee=0 
if (hour>0){ 
    fee=2; 
    hour-=3; 

    //without for loop 
    //if(hour>0)fee+=0.5*hour; 

    //with for loop 
    for(var i=0;i<hour;i++){ 
     fee+=0.5; 
    } 

} 
return fee; 
+0

Mettez-le dans un do {...} while (0); pour le rendre heureux. –

+0

oui, en pensant comment mettre pour la boucle – YOU

+0

ne importe pas, bon pour la référence –