Suren97 Ответов: 2

Javascript: как проверить, содержит ли каждая строка матрицы 0, возвращает true


У меня есть эта матрица`
[
[5,0,0,4],
[0,5,3,2],
[1,0,5,0],
[2,0,4,2]];
Мне нужно проверить, содержит ли какая-либо строка 0, а затем вернуть true, иначе вернуть false. В этом примере он должен возвращать true, потому что в каждой строке есть минимум один 0.

Что я уже пробовал:

Я пытался сделать это, но это неправильно.

function F(matrix){
	for(var i = 0; i < matrix.length; i++){
		for(var j = 0; j < matrix.length; j++){
			if(matrix[i][j] == 0){
				return true;
			}
		}
	}
	return false;
}
console.log(F([[5,0,0,4],[0,5,3,2],[1,0,5,0],[2,0,4,2]]));

lw@zi

Теперь это действительно звучит как домашние вопросы. Сделайте это сами или обратитесь за помощью к своему учителю. Вот еще один вопрос от того же пользователя: дрессировка нажмите кнопку

Suren97

нет, это не домашнее задание, я просто хочу развить свою логику. Но что я здесь написал не так? Я думаю, что это должно сработать верно :(

lw@zi

Вы можете отладить код и определить проблему. Обратитесь к ответу и на другой ваш вопрос.

Suren97

Как я могу проверить каждую строку в последовательности?

Richard MacCutchan

Вы все еще используете количество строк там, где вы должны использовать количество столбцов для вашего внутреннего цикла. Точно так же, как я уже объяснял ранее сегодня.

2 Ответов

Рейтинг:
17

Jochen Arndt

Вы пример кода является правильным, если вы хотите проверить, если какой-нибудь строка содержит нулевой элемент. Но вы, вероятно, хотите проверить, если каждый строка содержит по крайней мере один нулевой элемент.

Затем она может быть решена путем разрыва (возврата false), когда требуемое условие не выполняется, и, наконец, возврата true (никакого разрыва не произошло) и использования переменной для каждой строки, указывающей, имеет ли текущая строка один или несколько элементов, которые равны нулю:

for(var i = 0; i < matrix.length; i++){
    var hasZero = false;
    //for(var j = 0; j < matrix.length; j++){
    for(var j = 0; j < matrix[i].length; j++){
        if(matrix[i][j] == 0){
            hasZero = true;
            break;
        }
    }
    // No item in this row is zero
    // So break and return false
    if (!hasZero)
        return false;
}
// All rows contain at least one item that is zero
return true;


Suren97

Большое спасибо

Richard Deeming

for(var j = 0; j < matrix.length; j++){

Должна быть действительно:
for(var j = 0; j < matrix[i].length; j++){

Просто на случай, если матрица не квадратная. :)

Jochen Arndt

Спасибо тебе за это. Я обновлю свой ответ.

Я тоже это понял, но подумал, что он должен знать из-за всех других сообщений, упоминающих об этом.

Рейтинг:
1

Patrice T

matrix.length это число строк в matrix.
Ваш код работает потому что matrix имейте одинаковое количество столбцов.

Цитата:
Я пытался сделать это, но это неправильно.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
Отладка JavaScript[^]
Хром Инструменты Разработчика  |  Сеть  |  Разработчики Google[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.