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

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. это не первая итерация. на предыдущих итерациях все рассчитано правильно

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

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

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

var max = 0;
var imax;
var jmax;

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

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

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

	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);
	}
1 лайк

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

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

1 лайк