Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обьясните логику цикла для массива (https://javascript.ru/forum/misc/11925-obyasnite-logiku-cikla-dlya-massiva.html)

Aspiring 21.09.2010 16:59

Обьясните логику цикла для массива
 
Цель: если в любом ряде число элементов со значением 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, но выводится.

Где ошибка моего суждения?

Kolyaj 21.09.2010 17:01

Рабочий пример выложите.

Aspiring 21.09.2010 17:04

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'); 
	}
}


Вот. Кажется нигде не ошибся

Kolyaj 21.09.2010 17:15

Минимальный пример, чтобы проиллюстрировать вашу проблему, html не нужен, достаточно инициализировать переменные, используемые в первом сообщении.

Aspiring 21.09.2010 17:23

Обновил код

Kolyaj 21.09.2010 17:29

Цитата:

Сообщение от Aspiring
table.appendChild(a[n]);

Блин, ну какой table. Сделайте вы код, который можно вставить в консоль и выполнить. У вас же не с DOM проблемы.

Aspiring 21.09.2010 17:38

В чем Вы запускаете? Чтобы заранее знать правильно ли я сделал.

Чтобы воспроизвести то, что я хочу нужно использовать onclick. Одним JS не обойтись.

Вылаживать и HTML и JS?

Aspiring 21.09.2010 17:38

Как создавать подобные сообщение:
http://javascript.ru/forum/misc/1189...html#post71361 ?

Sweet 21.09.2010 17:54

http://javascript.ru/formatting

Kolyaj 21.09.2010 17:54

[ js run ][ /js ]
[ html run ][ /html ]


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