2016-04-24 1 views
0

Редактировать: Я решил проблему, изменив массив 2d на простой массив и используя арифметику и логику для получения координат, см. Ниже.Логическая ошибка не срабатывает в javascript

У меня есть алгоритм, который добавляет 50 к двумерному массиву, когда координаты имеют нечетно-нечетное спаривание (например, [1] [1], [3] [5] и т. Д.). Единственная проблема в том, что она не работает. В соответствии с консолью браузера он никогда не срабатывает. Это то, что это:

if(((col & 1) & row) == 1) { y+= 50; } 

Более подробный пример моего кода здесь:

//goes through the board's array and calls 
//drawChecker to print each found piece 
function drawPieces() { 

    var row = 0; 
    var col= 0; 

    for(row = 0; row < 1; row++) { 

     var y = row * 100; 

     console.log("row " + row + " set x to " + x); 
     var flag = (row & 1); 

     for(col = 0; col < 8; col++) { 

      var x = col*50; 

      console.log("column " + col + " set y to " + y); 

      console.log("y was " + y); 
      if(((col & 1) & row) == 1) { y+= 50; } 
      console.log("Now y is " + y); 

      console.log("Done setting " + row + "," + col); 

      console.log("Final coordinates are " + x + "," + y); 
      drawChecker(x,y,square[row][col]); 
     } 
    } 
} 

массив был создан с помощью следующего кода:

var square = new Array(4); 
for(i = 0; i < 4; i++) { square[i] = new Array(8); } 
+0

где должны результат расчета идти? к квадрату? –

+3

У вас есть только одна строка 'for (row = 0; row <1; row ++)' –

+0

Лучше использовать 'square.length' как предел во внешнем цикле' for' и 'square [row] .length 'во внутреннем, а не фиксированные значения. – hindmost

ответ

1

Вы не можете проверить алгоритмы только по строке 0.

function drawPieces() { 
 
    square.forEach(function (a, i) { 
 
     a.forEach(function (b, j) { 
 
      if (i & j & 1) { 
 
       square[i][j] = '#'; 
 
      } 
 
     }); 
 
    }); 
 
} 
 

 
var square = Array.apply(null, { length: 4 }).map(function() { return Array.apply(null, { length: 8 }).map(function() { return '.'; }); }); 
 
drawPieces(); 
 
document.write('<pre>'+square.map(function (a) { return a.join(''); }).join('\n')+'</pre>');

0

Итак, я в конечном итоге переключение моего 2d массив 4x8 в 1d массив из 32 элементов, и я изменил функцию только это:

function drawPieces() { 

    for(i = 0; i < 32; i++) { 

     var value = square[i]; 
     var x = (i % 4) * 100; //i%4 gets its column, 0-3 
     var y = Math.floor(i/4) * 50; //i/4 gets the row 0-3 

     if((i & 4) != 4) { x += 50; } //offset on even-numbered rows 

     drawChecker(x,y,value); 

     console.log(i + " has coordinates " + x + "," + y); 
    } 
}