Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доступ к определенной точке двумерного массива некоректный (https://javascript.ru/forum/misc/45280-dostup-k-opredelennojj-tochke-dvumernogo-massiva-nekorektnyjj.html)

Petesso 21.02.2014 18:14

Доступ к определенной точке двумерного массива некоректный
 
В общем, проблема заключается в следующем:
Создаю массив с помощью функции gen()
Добавляю в массив точку(предположительно с координатами 1;3) с помощью функции addPoint(1,3)
И потом вывожу на экран массив с помощью функции vis();

Получается что-то вроде

XXXXXXX
XXXOXXX
XXXXXXX
XXXXXXX
XXXXXXX

А хотелось бы

XXXXXXX
XXXXXXX
XXXXXXX
XOXXXXX
XXXXXXX

Как в массиве array[x][y] поменять местами x и y? Кроме как привыкнуть называть их по-другому.

function gen() {
	for(i=0; i < xLength; i++){
		array[i] = [];
		for(j=0; j < yLength; j++){
			array[i][j] = "X";
		}
	}
}

function vis() {
	for(i = 0; i < xLength; i++) {
		for(j = 0; j < yLength; j++) {
					arrayM = arrayM +array[i][j];
		}
	arrayM = arrayM + "<br>";
	}
}

function addPoint(x,y){
	array[x][y] = "O";
}

danik.js 21.02.2014 18:27

У тебя в коде логика такая, что x - это индекс строки, а не колонки, как ты хочешь.

Обычно i - это строка, j - это колонка.
x - это колонка(горизонтальная ось), j - Это строка(вертикальная ось). А у тя все поперепутано.

Petesso 21.02.2014 18:37

Тогда надо ковырять функцию gen()? Нет какой-нибудь замечательной приблуды, что "перевернет" массив?

danik.js 21.02.2014 18:46

Цитата:

Сообщение от Petesso
Нет какой-нибудь замечательной приблуды

Зачем? Просто исправь код, и не нужна никакая приблуда.

Поменяй местами xLength и yLength
И пиши array[y][x] в addPoint

Petesso 21.02.2014 18:52

danik.js, но в полной версии у меня еще есть куча функций связанных с конкретной точкой в массиве. Это только как пример. Я пока мирился с этим и писал всегда [y][x]. Но теперь нету больше сил. Всегда начинают течь из ушей мозги, когда дело доходит до написания каких-то точек. И фиг перепривыкнешь, ведь все годы обучения писал (x;y). И как перестроить массив я тоже понять не могу.

danik.js 21.02.2014 19:58

Транспонируй при выводе. Итерируй y, x вместо x, y

Aetae 21.02.2014 20:39

Изначально не подумал вот и мучаешься. Надо было сразу строить массив правильно. Технически никакой разницы же нет.
function gen() {
    for(i=0; i < yLength; i++){
        array[i] = [];
        for(j=0; j < xLength; j++){
            array[i][j] = "X";
        }
    }
}
function vis() {
    for(i = 0; i < xLength; i++) {
        for(j = 0; j < yLength; j++) {
                    arrayM = arrayM +array[j][i];
        }
    arrayM = arrayM + "<br>";
    }
}
function addPoint(x,y){
    array[x][y] = "O";
}


Часовой пояс GMT +3, время: 22:07.