Estoy tratando de obtener una declaración de cambio para usar una variable llamada "promedio" para el promedio de cinco calificaciones. Las cinco calificaciones se suman para obtener el total y luego se dividen por cinco para obtener el promedio. Como esto:
avg = +grade_one + +grade_two + +grade_three + +grade_four + +grade_five;El interruptor debe mostrar cinco casos, uno para cada rango de calificación (es decir, 90 % a 100 % = A). Así como el propio porcentaje.
Intenté usar casos con valores numéricos como "caso 1", por ejemplo, y luego imprimí dos líneas de texto, pero eso no funcionó.
¿Debería intentar usar una estructura if-else antes del cambio para establecer a qué equivale cada porcentaje de calificación en una carta, o eso no funcionará?
Aquí está el código para el interruptor.
switch (avg) { case 1: letter = "A"; per = "90-100"; document.write("Based on your semester average, your grade falls between " + per + "%"); document.write("you earned a " + letter); break; case 2: letter = "B"; per = "80-89.9"; document.write("Based on your semester average your grade falls between " + per + "%"); document.write("you earned a " + letter); break; case 3: letter = "A"; per = "70-79.9"; document.write("Based on your semester average your grade falls between " + per + "%"); document.write("you earned a " + letter); break; case 4: letter = "D"; per = "60-69.9"; document.write("Based on your semester average your grade falls between " + per + "%"); document.write("you earned a " + letter); break; case 5: letter = "F"; per = "Below 60%"; document.write("Based on your semester average your grade falls between " + per + "%"); document.write("you earned a " + letter); default: document.write("Invalid Entry"); break; }No debe usar un switch para eso: el código para cada caso es demasiado similar. La diferencia está solo en unos pocos valores, que puede almacenar en una matriz. Luego busque en esa matriz en qué segmento cae el promedio y construya la salida a partir de eso.
Además, no use document.write para esto. En su lugar, cree un elemento (como un div ) que contendrá el mensaje de salida.
No sé cuál es el contexto de tu ejercicio, pero supongo que hay algunas entradas con los 5 grados. Cárguelos como una matriz (no como 5 variables distintas) y calcule el promedio de forma genérica (no vinculado a 5).
Aquí hay un código sugerido en un fragmento ejecutable:
let thresholds = [100.1, 90, 80, 70, 60, 0]; let inputs = document.querySelectorAll("input"); let output = document.querySelector("div"); let button = document.querySelector("button"); button.addEventListener("click", function () { let grades = Array.from(inputs, inp => +inp.value); let avg = grades.reduce((a, b) => a + b) / grades.length; let i = thresholds.findIndex(min => avg >= min); let letter = "-ABCDF"[i]; let low = thresholds[i]; let high = thresholds[i - 1] - 0.1; let msg = `Based on your semester average, your grade falls between ${low}-${high}%\nYou earned a ${letter}.`; output.textContent = msg; }); Grades: <ul> <li><input type="number" min="0" max="100" value="80" size="4"> <li><input type="number" min="0" max="100" value="80" size="4"> <li><input type="number" min="0" max="100" value="80" size="4"> <li><input type="number" min="0" max="100" value="80" size="4"> <li><input type="number" min="0" max="100" value="80" size="4"> </ul> <button>Get grade</button> <div></div>