Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2013, 00:49
Кандидат Javascript-наук
Отправить личное сообщение для MininAS Посмотреть профиль Найти все сообщения от MininAS
 
Регистрация: 22.09.2009
Сообщений: 122

Где ошибка кода?
Стою на асфальте я в лыжи обутый, то ли лыжи не едут, то ли я ......

Что с кодом:
for (ii=0; ii<=YyY; ii++)
{
	for (i=0; i<=XxX; i++)
	{
                iii = i*ii+i;
		a_gameDB[iii] = Math.ceil (Math.random ()*((XxX*YyY-(iii))/10+4));
	           s_gameDB += a_gameDB[iii]+'/';
		document.getElementById('screen_right').innerHTML += a_gameDB[iii]+'-';
	}
}
document.getElementById('screen_right').innerHTML +='<br>' + s_gameDB + '<br> ';
for (i=0; i<=XxX*YyY; i++)
{
	document.getElementById('screen_right').innerHTML += a_gameDB[i]+'-';
}

Первый цикл в цикле создает массив a_gameDB из чисел и строку s_gameDB из тех же чисел, а во втором цикле опять перебирая массив программа выдает совершенно другие числа. Уже второй час туплю не понимаю в чем дело?

Последний раз редактировалось MininAS, 19.03.2013 в 14:32.
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2013, 01:21
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

Потому что
a_gameDB[i*ii+i] =
бред. Вы уверены, что на каждой итерации итератор будет ровно на единицу больше предыдущего? Для этого у массивов существует метод push. Ну и еще немного:
- ii и i у вас объявлены до циклов? Если нет, захламляете глобал, используйте for (var i = 0;...
- не используйте одинаковые названия итераторов для циклов (у вас 2 цикла с i = 0), тоже может вызвать проблему
- не используйте "XxX*YyY" в условии цикла, иначе умножение будет выполнятся на каждой итерации
- не используйте document.getElementById('screen_right') в цикле, создайте переменную до цикла
var screen_right = document.getElementById('screen_right');
, а в цикле используйте ее: screen_right.innerHTML
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2013, 06:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от zilker
, а в цикле используйте ее: screen_right.innerHTML
Даже больше: аккумулируйте html в строку-буфер, а уже после цикла присваивайте ее значение в innerHTML - скорость возрастет в разы.
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2013, 10:27
Кандидат Javascript-наук
Отправить личное сообщение для MininAS Посмотреть профиль Найти все сообщения от MininAS
 
Регистрация: 22.09.2009
Сообщений: 122

Сообщение от zilker Посмотреть сообщение
Потому что
a_gameDB[i*ii+i] =
бред.
1. Вы уверены, что на каждой итерации итератор будет ровно на единицу больше предыдущего? Для этого у массивов существует метод push.
Ну и еще немного:
2. - ii и i у вас объявлены до циклов? Если нет, захламляете глобал, используйте for (var i = 0;...
3. - не используйте одинаковые названия итераторов для циклов (у вас 2 цикла с i = 0), тоже может вызвать проблему
4. - не используйте "XxX*YyY" в условии цикла, иначе умножение будет выполнятся на каждой итерации
5. - не используйте document.getElementById('screen_right') в цикле, создайте переменную до цикла
var screen_right = document.getElementById('screen_right');
, а в цикле используйте ее: screen_right.innerHTML
Даже больше: аккумулируйте html в строку-буфер, а уже после цикла присваивайте ее значение в innerHTML - скорость возрастет в разы.
1. Ранее такое у меня сомнений не вызывало как и сейчас, и вообще я делал и по другому qwe = i*ii+i и вставлял qwe вместо i*ii+i. И push перебирал.
2. Почему я захламляю глобал если они постоянно используются у меня в множестве циклов по всему коду.
3. Каким образом?
4. согласен.
5. А вот про это стоп, я использую это просто, чтобы просмотреть что творится с циклом, этого момента в коде не будет.
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2013, 11:06
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от MininAS
2. Почему я захламляю глобал если они постоянно используются у меня в множестве циклов по всему коду.
Глобальную переменную неудобно отслеживать в отладчике. Да и зачем делать ее глобальной если она должна быть локальной?
3. Да ничего ничему не будет мешать, если циклы не вложенные.
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2013, 13:51
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

Сообщение от danik.js Посмотреть сообщение
Даже больше: аккумулируйте html в строку-буфер, а уже после цикла присваивайте ее значение в innerHTML - скорость возрастет в разы.
да, ночью не додумал

Цитата:
3. Каким образом?
да, могут возникнуть проблемы с вложенными циклами. Просто я вижу в 5й строке вашего кода переменную iii, что наталкивает на мысль, что приведенный вами код исполняется ещё в каком-то цикле с итератором iii. C таким подходом и кол-вом циклов есть вероятность ошибки.
Ответить с цитированием
  #7 (permalink)  
Старый 19.03.2013, 14:29
Кандидат Javascript-наук
Отправить личное сообщение для MininAS Посмотреть профиль Найти все сообщения от MininAS
 
Регистрация: 22.09.2009
Сообщений: 122

Сообщение от zilker Посмотреть сообщение
Просто я вижу в 5й строке вашего кода переменную iii, что наталкивает на мысль, что приведенный вами код исполняется ещё в каком-то цикле с итератором iii. C таким подходом и кол-вом циклов есть вероятность ошибки.
Извиняюсь это моя ошибка, там так же должно стоять i*ii+i. (исправил)

Но все же в чем ошибка?

Последний раз редактировалось MininAS, 19.03.2013 в 14:33.
Ответить с цитированием
  #8 (permalink)  
Старый 20.03.2013, 09:38
Кандидат Javascript-наук
Отправить личное сообщение для MininAS Посмотреть профиль Найти все сообщения от MininAS
 
Регистрация: 22.09.2009
Сообщений: 122

ААААААААААААААААААААААААА , лыжи едут!
Не i*ii+i, а XxX*ii+i.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вставке php кода в js код zevilz Общие вопросы Javascript 6 10.10.2012 19:21
Узнать строку и символ, где возникла ошибка (вопрос по eval и new Function) FINoM Общие вопросы Javascript 14 22.09.2012 02:56
ajax форма, подскажите где ошибка? bee AJAX и COMET 2 05.04.2012 23:15
Подскажите, где ошибка? Вып. меню allasan Элементы интерфейса 2 13.03.2012 01:36
Где ошибка? gogi Общие вопросы Javascript 8 04.02.2009 12:21