Не рассчитывает индексы максимального эл-та


#1

image

	function maxElem (A) {
		var max = 0;
		for (var i = 0; i < A.length; i++) {
			for (var j = 0; j < A[i].length; j++) {
				if (i < j) {
					if (A[i][j] > max) {
						max = A[i][j];
						var imax = i;
						var jmax = j;
					}
				}
			}
		}
		console.log(max + " " + imax + " " + jmax);
		return (max + " " + imax + " " + jmax);
	}

вот часть моей программы, которую я сейчас пишу. на скрине показана матрица и собственно сам результат функции выше. так вот. функция определяет максимальный элемент правильно, но пишет, что индексы элемента undefined. я так понимаю, что индексы выходят за границы массива… но почему? подскажите, пожалуйста

PS. это не первая итерация. на предыдущих итерациях все рассчитано правильно


#2

Значит что присвоения значения не произошло. Скорее всего проблема в условии, смотри ниже:

Вот это условие похоже лишнее. Не вижу причин зачем оно.

Эти var-ы вынеси рядом с var max = 0;. Код хоть и работает, но может работать неоднозначно в разных баузерах, которые реализую блочную область видимости. Да и кто работал в языках без хойстинга не поймет как род работает. В общем вот так каноничненько:

var max = 0;
var imax;
var jmax;

#3

это условие не лишнее. по условию нужно найти максимальный недиагональный эл-т, где i < j. хотя матрица симметричная, поэтому я написал условие i != j, но все равно значения undefined. imax и jmax вынес в начало функции. может ли быть проблема еще в чем-то? ведь значение максимального элемента то присваевается


#4

стоп. я сейчас присвоил значению max = -1. (я понял. индексы не присваивались, потому что и максимальное значение не присваивалось - поставил вместо >, >=) и у меня все заработало. только теперь итерация БЕСКОНЕЧНО ПОВТОРЯЕТСЯ в консоле. (присвоил минус бесонечность - то же самое). хмм… условие окончания итераций вообще не в этой функции. и странно, что расчеты повторяются, а не идут дальше


#5

в общем, конечная валидная функция такова:

	function maxElem (A) {
		var max = A[0][1];
		var imax;
		var jmax;
		for (var i = 0; i < A.length; i++) {
			for (var j = 0; j < A[i].length; j++) {
				if (i < j) {
					if (A[i][j] >= max) {
						max = A[i][j];
						imax = i;
						jmax = j;
					}
				}
			}
		}
		return (max + " " + imax + " " + jmax);
	}

#6

Не могу построить картину. Тебе нужно максимальное значение не из диагонали? Или максимальное значение которое выше диагонали?


#7

которое выше диагонали