Inquiridor
Matriz no JavaScript

Pergunta
-
Olá. Meu script tem um problema e eu simplesmente não consigo descobrir qual é o problema. Existem 2 blocos de código com estruturas iguais, apenas com algumas variáveis diferentes, mas, um deles funciona perfeitamente e o outro quebra (bloco 2).
Bloco 1:
// RE case 1: if (tamPalavra[i] <= x[i]) { for (var dir1 = 0; dir1 < tamPalavra[i]; dir1++){ while (matriz[x[i] - dir1, y[i]]) { do { x[i] = Math.floor((Math.random() * (xlength - 1)) + 1); y[i] = Math.floor((Math.random() * (ylength - 1)) + 1); } while (matriz[x[i]-dir1, y[i]]); } } for (var dir1x = 0; dir1x < tamPalavra[i]; dir1x++) { matriz[x[i] - dir1x, y[i]] = true; } for (z = 1; z <= tamPalavra[i]; z++) { canvas.fillText(palavra[i][z-1], 305 + (25 * x[i]) - (25 * (z - 1)), 20 + y[i] * 25); } } break;
Bloco 2:
// RC case 2: if (tamPalavra[i] <= y[i]) { for (var dir2 = 0; dir2 < tamPalavra[i]; dir2++) { while (matriz[x[i], y[i] - dir2]) { do { x[i] = Math.floor((Math.random()*(xlength - 1)) + 1); y[i] = Math.floor((Math.random()*(ylength - 1)) + 1); } while (matriz[x[i],y[i] - dir2]); } } for (var dir2x = 0; dir2x < tamPalavra[i]; dir2x++) { matriz[x[i], y[i] - dir2x] = true; } for (z = 1; z <= tamPalavra[i]; z++) { canvas.fillText(palavra[i][z-1], 305 + (25 * x[i]), 20 + y[i] * 25 - (25 * (z - 1))); } } break;
Declaração da Matriz:
var matriz = new Array(); for (var m = 0; m < xlength; m++){ matriz[m] = new Array(); } for (var mx = 0; mx < xlength; mx++) { for (var my = 0; my < ylength; my++) { matriz[mx,my] = false; } }
Tentei de várias maneiras descobrir o erro e não encontrei erro algum, mas vi que o Bloco 2 estava travando em:
} while (matriz[x[i], y[i]-dir2]);
De início não entendi, pois vi que a mesma estrutura estava funcionando perfeitamente no Bloco 1. Depois percebi que o sistema não estava processando a subtração na 2ª dimensão do array, mas processava a subtração que é feita no Bloco 1 na 1ª dimensão:
} while (matriz[x[i]-dir1, y[i]]);
Porque o programa trava no Bloco 2? O que causa isso? É um bug? É normal? Alguém poderia me ajuda com este problema?
- Editado Lucas Câmara sábado, 29 de dezembro de 2012 21:53
- Movido Felipo GonçalvesModerator sexta-feira, 5 de abril de 2013 13:08
Todas as Respostas
-
-
A sintaxe para matrizes multidimensionais no Javascript é:
m[i][j]
Por que você está fazendo assim?
m[i, j]
A linha do while() que está dando pau deveria ser assim:
} while(matriz[ x[i] ][ y[i] - dir2 ]);
- Editado neuron_upheaval quarta-feira, 17 de abril de 2013 18:01