2016-04-24 18 views
0

Bearbeiten: Ich habe das Problem gelöst, indem Sie die 2d-Array zu einem einfachen Array und mithilfe von Arithmetik und Logik, um Koordinaten zu erhalten, siehe unten.Logik nicht korrekt in Javascript

Ich habe einen Algorithmus, der 50 zu einem zweidimensionalen Array hinzufügt, wenn die Koordinaten eine ungerade-ungerade Paarung haben (z. B. [1] [1], [3] [5] usw.). Das einzige Problem ist, es funktioniert nicht. Laut der Browserkonsole wird es nie ausgelöst. Dies ist, was es ist:

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

Ein vollständigeres Beispiel meines Code ist hier:

//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]); 
     } 
    } 
} 

Das Array wurde mit dem folgenden Code ein:

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

wo sollte die Ergebnis der Berechnung gehen? platzen? –

+3

Sie haben nur eine einzelne Zeile 'für (Zeile = 0; Zeile <1; Zeile ++)' –

+0

Es wäre besser, 'square.length' als Grenzwert in der äußeren' for' Schleife und 'square [row] .length zu verwenden 'im Inneren, anstelle von festen Werten. – hindmost

Antwort

1

Sie können nicht testen die Algorithmen nur in Zeile 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

So landete ich meine 2D-Array von 4x8 zu einem 1D-Array aus 32 Schaltelemente, und ich änderte sich die Funktion nur dies:

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); 
    } 
} 
Verwandte Themen