2016-05-22 7 views
-2

Es tut mir leid, dass ich Noob bin, aber ich denke, ich bin an der richtigen Stelle. Ich habe versucht, Schachbrett von eloquent JavaScript zu lösen, aber es ist so schwer für mich, auch die Lösung zur Verfügung gestellt:Eloquente JavaScript Schachbrettlösung?

var size = 8; 
var board = ""; 
for (var y = 0; y < size; y++) { /* why 2 loops? */ 
for (var x = 0; x < size; x++) { 
    if ((x + y) % 2 == 0) /* why is this? */  
    board += " "; 
else  
    board += "#"; 
    } 
board += "\n"; 
} 
console.log(board); 

Kann jemand bitte Zeilen weiter erklären, ich will nicht, um dieses Problem passieren, ohne sie vollständig verstehen . Ist dieses Buch auch ein guter Start für Javascript?

+1

2 Schleifen für 2 Dimensionen. '%' ist der Rest/Modulo-Operator. es gibt einen Rest einer ganzzahligen Division zurück. –

+0

if ((x + y)% 2 == 0)/* Warum ist das? */...% ist der Mod-Operator, der prüft, ob das Ergebnis eine gerade Zahl ist. Die zwei Schleifen sind, weil Sie ein Brett haben, das zweidimensional ist – dinotom

+0

Ich frage mich, warum die # auf geraden Zahlen nicht auf verschiedenen Linien angezeigt wird? –

Antwort

2

Die zwei Schleifen sind erforderlich, um die zwei Dimensionen der Platine zu erstellen. Werfen Sie einen Blick auf:

Chess Board

Sie von der äußeren Schleife wie die Zeilen (die Zahlen auf dem Brett) denken kann und die innere Schleife wie die Spalten (das Alphabet auf der Platine). Jede Schleife der äußeren Schleifen erstellt eine andere Zeile, und jede Schleife der inneren Schleife erstellt eine andere Spalte in der Zeile.

Die if ((x + y) % 2 == 0) verwendet die % (Modulo), um zu bestimmen, ob die x + y dividiert durch 2 einen Rest hat. Wenn das Ergebnis gleich 0 ist, dann hatte es keinen Rest und ist daher eine gerade Zahl, also log ein Leerzeichen aus, sonst loggt sich ein # aus und baut dein Schachbrettmuster auf.

So zum Beispiel wäre der erste Platz in der oberen linken (0 + 0) % 2 in 0 resultierenden sein, so einen Raum drucken, und die nächste Platz über (1 + 0) % 2 wäre wäre 1 so ein # drucken.

In Bezug auf das Buch Eloquent JavaScript von Marijn Haverbeke, ja, es ist definitiv ein tolles Buch. Es deckt viele Themen ab und ist in einzelne Kapitel unterteilt, so dass es auch als Referenz dient. Ein Nachteil, den ich persönlich mit dem Buch gefunden habe, ist, dass der Autor in einigen Kapiteln sehr komplexe und komplizierte Beispiele verwendet, um die Verwendung von JavaScript zu demonstrieren.

+0

Ich verstehe das nicht so gut, aber ich bekomme es" So zum Beispiel das erste Quadrat in der Spitze links wäre (0 + 0)% 2, was zu 0 führt, also ein Leerzeichen drucken, und das nächste Quadrat wäre (0 + 1)% 2 wäre 1, also drucke ein # "warum ist x 0? Was ist mit der 2. Linie und so weiter? Warum beginnt es mit # –

+0

Schauen Sie sich 'for (var x = 0; x kevinto

+0

Vielleicht lohnt sich ein Blick auf Kapitel 2 [** For Loops ** [(http://eloquentjavascript.net/02_program_structure.html#h_oupMC+5FKN) von Eloquent JavaScript für ein wenig Auffrischung. – kevinto

0

Diese meine Lösung ist, wenn auch Linecounter, erste interne Schleife ausgeführt wird, wenn Linecounter ungerade ist, die zweite interne Schleife ausgeführt wird:

var line = "", size = 8, char; 
for (var linecounter = 0; linecounter < size; linecounter++){ 
    if (linecounter % 2 == 0) 
    for (var charcounter = 0; charcounter < size; charcounter++){ 
     if (charcounter % 2 == 0) 
     char = "_"; 
     else 
     char = "#"; 
     line = line + char; 
    } 
    else 
     for (var charcounter = 0; charcounter < size; charcounter++){ 
     if (charcounter % 2 == 0) 
      char = "#"; 
     else 
      char = "_"; 
     line = line + char; 
     } 
line = line + "\n"; 
} 
console.log(line); 
0

Hier ist eine Antwort, die die Arbeit erledigt wird.

function makeGrid(rows){ 
    var str = ''; 
    for (var i = 0; i < rows; i++) { 
    for (var j = 0; j < rows; j++) { 
     if((i+j)%2===0){ 
     str += '#'; 
     } else { 
     str += ' '; 
     } 
    } 
    str += '\n'; 
    } 
    return str; 
} 
Verwandte Themen