2010-11-23 4 views
1
function lab09unknownLoopCountPart2() { 

//Constants 
var ONE_HUNDRED = 100; 
var ZERO = 0; 

//Variables 
var employeeHourlyWage; 
var hourlyMaximum = ZERO; 
var hourlyMinimum = ZERO; 
var totalHourlyWage = ZERO; 
var records; 
var counter = ZERO; 
var average; 

records = openEmployeePayrollRecords(); 

while (records.readNextRecord()) { 
    employeeHourlyWage = records.getEmployeeHourlyWage(); 
    totalHourlyWage += employeeHourlyWage; 
    counter++; 
    average = totalHourlyWage/counter; 

    if (employeeHourlyWage < ONE_HUNDRED) { 
     hourlyMaximum = employeeHourlyWage; 
    } 
    if (employeeHourlyWage < ONE_HUNDRED) { 
     hourlyMinimum = employeeHourlyWage; 
    } 
} 
document.write("Average Hourly Wage: " + average + "<br />"); 
document.write("Maximum Hourly Wage: " + hourlyMaximum + "<br />"); 
document.write("Minimum Hourly Wage: " + hourlyMinimum + "<br />"); 

}Javascript chèque de Max/Min/Nombre moyen d'un record établi

Le jeu d'enregistrements est tout simplement le nombre de 15 - 30. Je dois trier eux et trouver le maximum, minimum et moyenne.

Je sais que mes deux instructions IF sont incorrectes et je me demande comment vérifier ceci, sans en utilisant Math.min et Math.max.

Merci.

Répondre

1
var hourlyMinimum = -1; 
    var hourlyMaximum = -1; 

    if (hourlyMaximum === -1 || employeeHourlyWage > hourlyMaximum) { 
     hourlyMaximum = employeeHourlyWage; 
    } 
    if (hourlyMinimum === -1 || employeeHourlyWage < hourlyMinimum) { 
     hourlyMinimum = employeeHourlyWage; 
    } 

En supposant que les salaires ne peuvent pas être négatifs.

0
if (employeeHourlyWage > hourlyMaximum) 
    hourlyMaximum = employeeHourlyWage; 
if (employeeHourlyWage < hourlyMinimum) 
    hourlyMinimum = employeeHourlyWage; 

Vous pouvez également déplacer le calcul de la moyenne en dehors de la boucle car sa valeur est utilisée uniquement à l'extérieur. A propos, à quoi bon utiliser ces constantes ZERO et ONE_HUNDRED - elles ne sont pas sémantique de toute façon.

+0

C'est simplement la façon dont mon instructeur nous a déclaré des constantes, est-ce que je ne devrais pas les déclarer? Je suis un peu confus par ce que tu veux dire. – TheStandardRGB

+0

Le but de la déclaration des constantes est d'éliminer les valeurs étranges du code et de montrer la signification réelle de ces valeurs - cela facilite la compréhension du code. Vous avez remplacé 0 avec ZERO et 100 avec ONE_HUNDRED, ce qui ne fait aucune différence dans la compréhension de ces valeurs. Vous pouvez utiliser 0 au lieu de ZERO et quelque chose comme MAX_POSSIBLE_HOURLY_WAGE au lieu de HUNDRED. –

+0

Oh je comprends, merci Loki. – TheStandardRGB

0

Pour vos deux "conditions", vous vérifiez si la nouvelle valeur salariale est supérieure au maximum ou au minimum. Où hourlyMaximum donne la valeur maximale pour chaque EmployeeHourlyWage dans l'ensemble EmployeePayrollRecords.

et

hourlyMinimum donne la valeur minimale pour chaque EmployeeHourlyWage dans les EmployeePayrollRecords fixés.

Ainsi, pour chaque itération de la boucle while, vous devez réaffecter la valeur du salaire dans le bloc if.

Si le salaire actuel acquis à partir des enregistrements est supérieur au maximum actuel, affectez-le sinon. Un processus similaire pour le minimum.

Le courant « si les blocs » réaffecte juste la valeur du minimum horaire et le salaire maximum une fois qu'il est inférieur à 100 (ONE_HUNDRED)

Pour vous prouver que vous êtes bien trouvé les valeurs correctes, essayez de les sortir par code et à la main.