Обьясните логику цикла для массива
Цель: если в любом ряде число элементов со значением X достигнет трёх выдать сообщение.
for (var n=0; n<(rows*cols); n++){
if (s1[n] == 'X') k1++;
if (n == cols) k1 = 0;
if (k1 == 3) alert('win');
}
Цикл запускается через onclick. Допустим ряды воображаемы. По моей логике после каждого клика цикл начинает подставлять значения с 0 до (rows*cols). Допустим в первом ряде 2 "Х". Идем далее и достигли значения cols, обнулили. В следующем ряде опять 2 "Х". По логике ничего не должно выводится поскольку значение k1 еще не достиг 3, но выводится. Где ошибка моего суждения? |
Рабочий пример выложите.
|
var n, t, rows=5, cols=5, k=0, k1=0, z;
var a = [];
var s1 = [];
for (var n=0; n<(rows*cols); n++) {
a[n] = document.createElement('input');
a[n].name = n;
a[n].onclick = function() {
t = event.target || event.srcElement;
if ((t.value == '') && (k % 2 ==0)) {t.value = 'X'; k++;};
if (t.value=='X') {z=t.name; s1[z]='X';}
for (var n=0; n<(rows*cols); n++){
if (s1[n]=='X') k1++;
if (n==cols) k1=0;
if (k1==3) alert('win');
}
}
Вот. Кажется нигде не ошибся |
Минимальный пример, чтобы проиллюстрировать вашу проблему, html не нужен, достаточно инициализировать переменные, используемые в первом сообщении.
|
Обновил код
|
Цитата:
|
В чем Вы запускаете? Чтобы заранее знать правильно ли я сделал.
Чтобы воспроизвести то, что я хочу нужно использовать onclick. Одним JS не обойтись. Вылаживать и HTML и JS? |
Как создавать подобные сообщение:
http://javascript.ru/forum/misc/1189...html#post71361 ? |
|
[ js run ][ /js ]
[ html run ][ /html ] |
Разобрался. Ошибок 2.
1) Перед запуском цикла обнулять значение k1. Это легко осуществлилось так как в моем случае цикл запускается по клику. 2) Обнулять значение до плюсования. PS: не знаю есть ли смысл сиего сообщения :D |
| Часовой пояс GMT +3, время: 01:16. |