Как можно улучшить код функции sumInput() для правильного расчета и вывода суммы элементов массива, введенных пользователем?
Функция на JavaScript может не выполняться по разным причинам. Некоторые из возможных причин могут быть: 1. Ошибка в синтаксисе кода функции (например, неправильно закрытые фигурные скобки или кавычки). 2. Неправильное использование переменных или операторов в функции. 3. Ошибки при передаче аргументов в функцию. 4. Отсутствие вызова функции в коде или вызов функции в неправильном месте. Чтобы улучшить код функции sumInput() для правильного расчета и вывода суммы элементов массива, введенного пользователем, можно внести следующие улучшения: 1. Добавить проверку на корректность вводимых пользователем данных (например, проверку на числовое значение). 2. Использовать метод prompt() для ввода данных пользователем. 3. Использовать метод parseInt() для преобразования введенной строки в целое число. 4. Добавить проверку на пустой массив. 5. Переносить введенные значения в массив и затем проходить по нему, суммируя все числовые элементы. Пример улучшенного кода функции sumInput(): ```javascript function sumInput() { let inputArray = []; let input = prompt("Введите число", ""); while (input !== null && input !== '') { let number = parseInt(input); if (!isNaN(number)) { inputArray.push(number); } input = prompt("Введите число", ""); } let sum = inputArray.reduce((acc, val) => acc + val, 0); console.log("Сумма элементов массива: " + sum); } sumInput(); ``` Такой код будет корректно считать и выводить сумму элементов массива, введенных пользователем.
Можно сделать так (оставил весь ваш код, только заменил порядок одной строчки, чтобы заработало):
function sumInput() { let arr = [] let sum = 0 function checkNum() { let numVal = +prompt('Введите значение', '') if (!isNaN(numVal)) { // checkNum() // было так arr.push(numVal) // добавляем элемент в массив console.log(arr) checkNum() // только после этого вызываем функцию checkNum } else { for (let i = 0; i < arr.length; i++) { sum += arr[i] } console.log(sum) } } checkNum() }
Код не работал потому что "вся полезная работа" откладывалась из за преждевременного вызова checkNum. А поскольку вызов рекурсивный, то сложно заметить такую ошибку и вообще понять что происходит в коде. Но в принципе ваш подход рабочий.
То что в консоли бывает undefined - это потому что основная функция sumInput ничего не возвращает явно (нет return). Но такие функции в JS всё же возвращают значение, просто оно не определено - undefined.
P.S.: Чтобы выполнить остальные условия из задания (пуcтая строка, кнопка Отмена), можно сделать так:
let val = prompt('Введите значение', ''); // сохраняем оригинальное значение let numVal = Number(val); // приводим тип к числу, можно и через +val, как у вас /* расширяем условие проверки полученного значения 1. Если приведённая к типу число переменная не является числом 2. И если переменная не null (так будет в случае нажатия Отмена) 3. И если тип оригинального значения - строка и после удаления пробелов сохраняет длину (не пустая строка) */ if (!isNaN(numVal) && (val !== null) && (typeof val == 'string' && val.trim().length)) {
Всё это можно красивее написать, но потребуется сильнее изменить структуру кода.
1. Зачем нужен рекурсивный вызов checkNum?
2. При нажатии кнопки "Отмена" возвращается null, а +null === 0.
3. Массив тут не нужен. Совсем не нужен.