Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается 2-мерный массив. 
:(
    Опции темы
kuksha
Дата 8.1.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Пытаюсь сделать 2-мерный массив 650x650 в виде глобального, чтобы потом вызывать из функций.
Сделал это так, на большее знаний не хватило:
Код

...
 var Dot_data = new Array(650);
 for (i=0; i<650; ++i) { Dot_data[i]=new Array(650);}
...
function a()
{
 ...
 Dot_data[X-1][Y-1]=zv_n[i]; //сбойная строка
}

Собственно указана сбойная строка, на которой скрипт "вылетает". (вместо zv_n[i] я пробовал подставлять и строки и числа - всё равно сбоит)
Наверное лучше посмотреть это вживую в файле: http://info-7.ru/Astro/draw_map5.js строка №171.
При этом строка №903 
Код

msg.document.write(Dot_data[Xi-1][Yi-1]);

отрабатывает нормально.
Что я не так делаю?
PM MAIL   Вверх
kuksha
Дата 8.1.2012, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Может просто for не отрабатывает так как это прописано? 
Ведь из PHP-файла вызываются конкретные функции из этого js-файла, а заполнение второго измерения этого массива идёт через for вне функций, который то ли отрабатывает то ли нет. С другой стороны - ведь глобальные переменные подцепляются нормально, а некоторые и вычисляются...
Не знаю в какую сторону ещё думать...
Может есть другие способы задания такого массива?

Это сообщение отредактировал(а) kuksha - 8.1.2012, 21:22
PM MAIL   Вверх
Amphiluke
Дата 8.1.2012, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



kuksha, вам сложно помочь, не видя, что за ошибка. Что пишется в консоль конкретно? Файл вашего скрипта мало чем может помочь в выяснении обстоятельств ошибки. Гораздо легче было бы, если бы вы дали ссылку на страницу, где проявляется баг.
PM   Вверх
kuksha
Дата 8.1.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Вот сама страница, с которой вызывается этот файл:
http://info-7.ru/Astro/nebo_segodnya_geo5.php?zero=1
на ней рисуются линии созвездий, а дальше должны рисоваться звёзды, но их нет - из этого цикла мы и вылетаем...
А вот для сравнения:
http://info-7.ru/Astro/nebo_segodnya_geo.php?zero=1
PM MAIL   Вверх
Amphiluke
Дата 8.1.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(kuksha @  8.1.2012,  21:15 Найти цитируемый пост)
Код

Dot_data[X-1][Y-1]=zv_n[i]; //сбойная строка


Методом простой трассировки скрипта выясняется, что переменные X и Y могут принимать совершенно произвольные значения: как отрицательные, так и бОльшие, чем размерность массива Dot_data. Следовательно, причина в неправильных индексах.

PM   Вверх
kuksha
Дата 8.1.2012, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



АЙ!!!!!
точно... это же координаты...
Очередное спасибо!

Amphiluke, а чем Вы пользуетесь для отладки? Может у меня бы вопросов поменьше стало...
PM MAIL   Вверх
Amphiluke
Дата 8.1.2012, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Кстати (простите), я надеюсь, это черновая версия скрипта? smile  Некоторые программы на ассемблере читать проще.

Добавлено через 30 секунд
Цитата(kuksha @  9.1.2012,  02:22 Найти цитируемый пост)
а чем Вы пользуетесь для отладки?

Firebug`ом.
PM   Вверх
kuksha
Дата 8.1.2012, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Там много чего "оставленного на потом", начиная с var в каждой строчке... 
Я же JS по-большому счёту почти не знаю - это первое что на нём пишу...
PM MAIL   Вверх
Amphiluke
Дата 8.1.2012, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Кстати (не по теме). Когда пишете документ в новом окне методом document.write, не забывайте закрывать поток вывода методом document.close(). В отличие от document.open(), вызов этого метода обязателен…
Код

msg=window.open("","msg","height=200,width=200,left=500,top=10");
msg.document.write("<html><title>Image</title><body>");
msg.document.write(Dot_data[Xi-1][Yi-1]);
msg.document.write("</body></html>");
msg.document.close();

PM   Вверх
kuksha
Дата 8.1.2012, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Ага, учту smile
PM MAIL   Вверх
kuksha
Дата 10.1.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Вот такой вопрос образовался:
А как быстрее всего упомянутый в первом сообщении глобальный двумерный массив Dot_data "опустошить" по ходу работы? То есть не залить нулями в цикле, а так чтобы он просто был пустым (null). (по ходу работы заполняются только некоторые его ячейки, остальные должны остаться null)
Двойным циклом как-то некрасиво делать, а сделать его заново (когда он весь null) внутри функций наверное помешает его глобальность.

Это сообщение отредактировал(а) kuksha - 10.1.2012, 19:09
PM MAIL   Вверх
Amphiluke
Дата 11.1.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Пустой массив и null — не одно и то же. Определитесь, что вам конкретно нужно. Если вы хотите дать понять сборщику мусора, что данные массива более не потребуются, и память, выделенная под массив, может быть освобождена, просто обнулите ссылку.
Код

Dot_data = null;

Если же вам нужно именно «опустошить» массив, можно воспользоваться тем, что свойство length объектов Array доступно для записи.
Код

Dot_data.length = 0;

Цитата(kuksha @  10.1.2012,  23:07 Найти цитируемый пост)
Двойным циклом как-то некрасиво делать, а сделать его заново (когда он весь null) внутри функций наверное помешает его глобальность.

Почему это глобальность помешает? Напротив, она делает массив доступным из любой точки программы.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.