En mi programa, estoy usando un bucle do-while para solicitar calificaciones hasta que se ingresa un -1 y luego aumenta la cantidad de calificaciones ingresadas. Luego, un ciclo while verifica si la calificación es NaN o menor que 0 o mayor que 100. El programa solicitará otra calificación si es así. Si se ingresa un -1, el programa saldrá del ciclo y calculará el promedio basado en el contador de calificaciones y el número total de calificaciones sumadas. Cuando ejecuto el programa y pongo un 1 negativo para detenerlo, imprime el -1 dentro de la tabla y el promedio semestral se muestra como NaN. Supongo que esto se debe a que el -1 negativo hace que no sea un número positivo, pero no estoy seguro de cómo solucionarlo.
Aquí está mi código.
do { grade = prompt('Enter grade(-1 to stop)'); count++; while (grade < -1 || grade > 100 || isNaN(grade)) { grade = prompt('Enter grade again (-1 to stop)'); } document.write('<td>Grade ' + count + '</td>'); document.write('<td width="50"> ' + grade + ' </td>'); document.write('</tr>'); } while (grade != -1) { --total; alert("You have input -1 to stop"); document.write('</table>'); } total = total + grade; avg = total / count; document.write('Semester Average: ' + avg + '<br /><br />');Intenté solucionar tu problema aquí.
https://jsfiddle.net/51v3qft9/26/
Este es el fragmento que puede no ser correcto según su lógica, pero funciona para mí.
var count = 0 var total = 0 var avg = 0 document.write('<table>'); do { grade = prompt('Enter grade(-1 to stop)'); //if user key-in nothing, we need to ask user to key-in again while (!grade || grade < -1 || grade > 100 || isNaN(grade)) { grade = prompt('Enter grade again (-1 to stop)'); } //whenever user key-in -1, we need to break `while` if (grade == -1) { break } count++; document.write('<td>Grade ' + count + '</td>'); document.write('<td width="50"> ' + grade + ' </td>'); document.write('</tr>'); total += Number(grade); // you need to convert `grade` to number } while (grade != -1) alert("You have input -1 to stop"); document.write('</table>'); if(count > 0) { avg = total / count; } document.write('Semester Average: ' + avg + '<br /><br />');