Вложенный цикл не определен (Javascript) - PullRequest
0 голосов
/ 02 июля 2019

Моя результирующая матрица кажется неопределенной. В строке 25 эта ошибка выводит моя консоль chrome: «Невозможно установить свойство« 0 »из неопределенного».

При рассмотрении аналогичных проблем большинство решений умножения матриц, которые я видел, используют 3 вложенных цикла, в отличие от моих 4. Возможно, это лучший способ, но четыре цикла - единственный способ, который имеет смысл для меня, поскольку итерации состоят из двух отдельных строк и двух отдельных столбцов. Если это является причиной моей ошибки, может кто-нибудь объяснить, почему?

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	//C[i] = 0;
	for (var j = 0; j < A[j].length; j++) {
		//console.log(A[i][j]);
		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				//console.log(B[x][y]+ "["+x+","+y+"]");
				console.log(C[i][y] + "[" + i + "," + y);
				C[i][y] += A[i][j] * B[x][y];
			}
			console.log(C[i][y] + "[" + i + "," + y + "] is the resultant matrix");
		}
	}
}        

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Измените //C[i] = 0; на C[i] = [];. Вам нужно инициализировать массив под C[i], чтобы получить к нему доступ позже C[i][y] = 0;

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	C[i] = [];
	for (var j = 0; j < A[j].length; j++) {

		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				C[i][y] += A[i][j] * B[x][y];
			}
		}
	}
}
console.log(C);
0 голосов
/ 02 июля 2019

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	C[i] = [];
	for (var j = 0; j < A[j].length; j++) {

		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				C[i][y] += A[i][j] * B[x][y];
			}
		}
	}
}
console.log(C);
...