@sergemin

Какая ошибка в коде?

Решаю задачи по js и запнулся на вот этой. Смысл задачи в том, что дана матрица и нужно найти в ней сумму элементов, которые не равны нулю, также, если выше элемента находится ноль, то это элемент в сумму тоже нельзя добавлять

function matrixElementsSum(matrix) {
    var sum = 0;
    console.log(matrix[1][1]);
    for(var i=0, k=matrix.length; i<k; i++) {
        for(var j=0, z=matrix[i].length; j<z; j++) {
            if(( matrix[i][j] !== 0)  && (matrix[i-1][j] !== 0)) {
                sum += matrix[i][j];
            }

        }
    }
    return sum;
}
console.log(matrixElementsSum([[0, 1, 1, 2], 
                                [0, 5, 0, 0], 
                                [2, 0, 3, 3]])); //должно быть равно 9 (из примера)

Ошибка: Uncaught TypeError: Cannot read property '1' of undefined (на строке с условием if)
  • Вопрос задан
  • 159 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
При обработке каждого значения в каждой строке вы проверяете нет ли строкой выше нуля.
Отлично.
Но что происходит, когда вы обрабатываете первую строку? matrix[i-1][j]matrix[0-1][0]
У вас есть элемент matrix[-1]?

Можно проверять не первая ли строка
if (i === 0 || matrix[i-1][j] !== 0) {
    sum += matrix[i][j];
}
Ответ написан
pm_wanderer
@pm_wanderer
junior-HTML
Попробуй вместо matrix[i-1][j] написать matrix[i === 0 ? 0 : i - 1][j]
Либо через max(i - 1, 0) - так даже более изящно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы