2017-01-13 8 views
0

Im dieses Problem von eloquent Javascript tun, sollte es soGebäude Schachbrett mit Javascript in der Konsole

# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 

drucken, aber kann nicht scheinen, um herauszufinden, wie die Zeilen zu wechseln. Bisher bin ich nur mit dem Raster gekommen.

# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 

diesen Code mit

var hash = '' 
var size = 8 


for (var i = 0; i < size; i++) { 
    for (var j = 0; j < size; j++) { 
     hash.charAt(hash.length-1) === '#' ? hash += ' ': hash += '#' 
    } 
    hash += '\n' 
} 
console.log(hash) 

der Code, den sie verwendet, um das Problem zu beantworten, ist dies

var size = 8; 

var board = ""; 

for (var y = 0; y < size; y++) { 
    for (var x = 0; x < size; x++) { 
    if ((x + y) % 2 == 0) 
     board += " "; 
    else 
     board += "#"; 
    } 
    board += "\n"; 
} 

console.log(board); 

aber ich bin sicher, dass stattdessen eine Möglichkeit, meine Code gibt es verwenden. Irgendwelche Ideen?

+2

Offensichtlich gibt es keine Möglichkeit, es Ihren Code ohne Änderung zu machen zu arbeiten, weil Ihr Code nicht funktioniert, und so, wie es Arbeit zu machen, indem Sie den Code, der funktioniert. –

+0

'if (i + 1)% 2! == 0 // gerade Zeile, ein Leerzeichen an die Zeichenkette anhängen ' – sweaver2112

Antwort

1

Sie sollten den Unterschied zwischen ungeraden/geraden Zeilen machen. Diese Sie durch einen Blick auf die Summe der Zeilen- und Spaltenindizes tun können: wenn genau einer von ihnen ungerade ist, erzeugen einen Hash, sonst einen Raum:

var hash = '' 
 
var size = 8 
 

 
for (var i = 0; i < size; i++) { 
 
    for (var j = 0; j < size; j++) { 
 
     (i + j) % 2 ? hash += '#': hash += ' ' 
 
    } 
 
    hash += '\n' 
 
} 
 
console.log(hash)

Beachten Sie, dass Sie sich bewegen können die Zuordnung aus dem ternären Operator:

 hash += (i + j) % 2 ? '#' : ' ' 

Aber ehrlich gesagt, ist es nicht unveränderlich auf eine Zeichenfolge, da in JavaScript-Strings hinzufügen zu halten geraten, so dass Sie wirklich eine neue Zeichenfolge mit jedem += Betrieb erstellen.

Dies ist, wie ich es mit diesem ES6 Code tun würde vorschlagen:

var hash = '' 
 
var size = 8 
 

 
hash = Array.from(Array(size), (_, i) => 
 
    Array.from(Array(size), (_, j) => 
 
    (i+j)%2 ? '#' : ' ' 
 
).join('') 
 
).join('\n'); 
 

 
console.log(hash)

0

Sie müssen die geraden Zeilen und fügen Sie einen zusätzlichen Platz zu Beginn der Zeichenfolge identifizieren.

// Identify the even row and add an Extra space if(i % 2 === 0) { hash+= ' '}

folgenden Code sollte die erwartete Ausgabe.

var hash = '' 
 
var size = 8 
 
        
 
for (var i = 0; i < size; i++) { 
 
      
 
    // Identify the even row and add an Extra space 
 
    if(i % 2 === 0) { hash+= ' '} 
 

 
    for (var j = 0; j < size-1; j++) { 
 
     hash.charAt(hash.length-1) === '#' ? (hash += ' '): (hash += '#') 
 
    } 
 
    hash += '\n' 
 
    } 
 
console.log(hash)

+0

Sollten Sie die Grenze der' j' Schleife nicht einstellen, geben Sie' i% 2 == 0 ein '? Andernfalls drucken Sie ein zusätzliches Zeichen. –

+0

Ich sehe nur ein zusätzliches Leerzeichen in der letzten Zeile. ist das was du beziehst? – Agalo

+0

Wird dies in 'node' ausgeführt, wird' '# # # # \ n # # # # \ n # # # # \ n # # # # \ n # # # # \ n # # # # \ n # # # # \ n # # # # \ n''. Die ungeraden Zeilen haben also neun Zeichen, das kann mühsam sein, wenn Sie zum Beispiel ein Rechteck darum zeichnen wollen. –