2015-06-22 15 views
-2

編寫一個程序,該程序創建一個代表8×8網格的字符串,使用換行符分隔行。在網格的每個位置都有空格或「#」字符。角色應該形成一個棋盤。Eloquent Javascript:Chessboard

我的代碼不斷創建一個具有所有散列的8 x 8結構。 有人可以提供一些建議來編輯我的代碼?

var size = 8; 

var str = ""; 

var altern = false; 
var line = 1; 

while (line <= size) { 
    var character = 1; 
    while (character <= size) { 
     if (altern) { 
      if (character % 2 === 0) { 
       str += "#"; 
       console.log(character); 
       console.log(str); 

      } else { 
       str += " "; 
       console.log(character); 
       console.log(str); 
      } 

     } else { 
      if (character % 2 === 0) { 
       str += " "; 
       console.log(character); 
       console.log(str); 
      } else { 
       str += "#"; 
       console.log(character); 
       console.log(str); 
      } 
     } 

     altern = !altern; 
     character++; 

    } 

    str += "\n"; 
    line++; 
} 

console.log(str); 
+0

你能有更多的解釋和更少的代碼編輯你的問題?現在不清楚你在問什麼。 –

+0

這是一個單行,'if(column - row%2)%2' == 0 – Rishav

回答

1

通過同時使用alterncharacter % 2您選擇用#每次迭代的分支。只使用其中的一個。

0

我懷疑你想要切換altern每個新,不是每個

你在循環裏有一個循環。將您的altern切換代碼從內部循環移至外部循環。

while (line <= size) { 
    var character = 1; 
    while (character <= size) { 
     // inner loop code here 
     character++; 
    } 

    // Outer loop end code. HERE is where you toggle altern 
    str += "\n"; 
    line++; 
    altern = !altern; 
} 
0

下面的工作,但我用Os(大寫字母)代替空格,並在您的代碼中稍作修改。

var size = 8; 

var str = ""; 

var altern = false; 
var line = 1; 

while (line <= size) { 
    var character = 1; 
    while (character <= size) { 
     console.log('altern: ' + altern + 'character: ' + character); 
     if (altern) { 
      if (character % 2 === 0) { 
       str += "O"; 
       console.log(character); 
       console.log(str); 

      } else { 
       str += "#"; 
       console.log(character); 
       console.log(str); 
      } 

     } else { 
      if (character % 2 === 0) { 
       str += "O"; 
       console.log(character); 
       console.log(str); 
      } else { 
       str += "#"; 
       console.log(character); 
       console.log(str); 
      } 
     } 

     altern = !altern; 
     character++; 

    } 

    str += "\n"; 
    line++; 
} 

// console.log(str); 
alert(str); 

這個工作,但不是,我建議你嘗試以更好的方式重寫這段代碼。提示:關注@koenpeters所說的話。

0

而不是使用所有這些循環的你可以這樣做:

var width = 8, 
    height = 8, 
    str = new Array(1 + (width * height + height)/2).join('# ').replace(new RegExp('(.{' + width + '}).', 'g'), '$1\n'); 

的作品只要寬度不是即使在同一時間高度爲奇數。

如果你只需要爲這一個特定的情況下,你也可以擺脫了一下開銷的,只是使用:

var str = new Array(37).join('# ').replace(/(.{8})./g, '$1\n') 
-1

認識到的是,鑑於ñ個最根本的區別如果N是奇數,它的第一個正方形將變成黑色,否則就是白色。另外,如果給定行的第一個平方爲黑色,那麼對於給定列M,如果M是奇數,則正方形將是黑色,如果M是偶數,則正方形將是白色。

類似地,如果第一方是白色的,則對於柱中號,方將白如果中號是奇數,和黑色否則。

希望有所幫助。

編輯:

試試這個,如果你的代碼不可讀的粉絲:基於位置

for i in range(8): 
    s = '' 
    for j in range(8): 
     if (i - j%2) % 2 == 0: 
      s = s + "#" 
     else: s = s + 'O' 
    print s 
0

而不是一個while循環過度重複的情況下和(即甚至VS奇)使用兩個for循環和一個case語句來確定某個位置是否需要#vs「」。將它們存儲到var中,然後在完成後打印該var。

var board = ""; 
var countX = 0; 
var countY = 0; 
var size = 8; 

for(var i = 0; i < size; i++) { 
    for(var j = 0; j < size; j++) { 
     if((countX + countY) % 2 == 0) { 
      board += " "; 
     } 
     else { 
      board += "#"; 
     } 
     countX++; 
    } 
    board += "\n"; 
    countY++; 
} 
console.log(board); 

板輸出:

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