none
Matriz no JavaScript RRS feed

  • 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?


    sábado, 29 de dezembro de 2012 21:50

Todas as Respostas

  • Vou mover para outro tópico para ver se te ajudam.

    Att, Felipo Gonçalves | Microsoft Contingent Staff

    sexta-feira, 5 de abril de 2013 13:07
    Moderador
  • 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 ]);



    quarta-feira, 17 de abril de 2013 17:54