2016-05-29 107 views
0

我想寫一個程序,它創建一個代表8×8網格的字符串,使用換行符來分隔線條。在網格的每個位置都有空格或「#」字符。角色應該形成一個棋盤。JavaScript算法來生產國際象棋棋盤8x8網格模式

傳遞這個字符串console.log應顯示是這樣的:

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

當你產生這種模式的程序,定義一個變量size = 8和更改程序,使其工作於任何大小,輸出給定寬度和高度的網格。

var hash = "#"; 
var space = ' '; 
var size = 8; 

for (var x = 1; x <= size; x++); { 
    var line = ' '; 

    for (var y = 1; y <= size; y++); { 
    if (x % 2) { 
     if (y % 2) { 
     line = line + space; 
     } else { 
     line = line + hash; 
     } 
    } else { 
     if (y % 2) { 
     line = line + hash; 
     } else { 
     line = line + space; 
     } 
    } 

    } 

    console.log(line); 
} 

我無法弄清楚爲什麼這不工作... :(

+0

'var line ='';'< - 在開始處創建一個空白空間。它是如何工作的,輸出或錯誤是什麼? – coyotte508

+2

你的循環中有一個尾隨的分號,意味着它們沒有執行:'for(var x = 1; x <= size; x ++);' –

+0

是的,分號就是它。謝謝!另外,空間!甚至沒有考慮它。 –

回答

1

在你的循環的末尾刪除分號:

for (var x = 1; x <= size; x++) { 
    var line = ' '; 

    for (var y = 1; y <= size; y++) { 

有了分號,發動機將做到以下幾點:

  1. 運行的東西后「的」括號內 - i將在10之後
  2. 花括號內的大括號將執行一次之後

如果添加換行,可以很明顯

for (var i = 0; i < 10; i++); 
{console.log(i);} 

大括號不屬於爲體,而是一個新的塊。

+0

D'oh!感謝您的答覆! –

0

請確保您刪除; - 在for循環的前S,因爲你for循環是不正常執行括號裏面的邏輯(代碼將只運行一次):

像這樣的事情會做你想要什麼:

var size = 8;  
 
for (var y = 0; y < size; y++) { 
 
    var line = ' '; 
 

 
    for (var x = 0; x < size; x++) { 
 
     line += (y + x + 1) % 2 ? ' ': '#'; 
 
    } 
 

 
    console.log(line); 
 
}

+0

你能告訴OP他出錯了嗎? (額外的分號)。否則這個答案是無用的。 – coyotte508

+0

爲什麼OP應用這個功能?你解決了這個問題,但由於你沒有解釋任何問題,所以答案不能幫助OP理解這個問題。 – DarkDust

+0

語法沒有錯,_behaviour_不是OP期望的。 – DarkDust