Обьясните логику цикла для массива
Цель: если в любом ряде число элементов со значением 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 ] |
Часовой пояс GMT +3, время: 10:25. |