如何解决Eloquent Javascript"Chess Board"?

tsa*_*vid 7 javascript eloquent

新编码器在这里试图学习JS.我已经使用了codecademy,现在正在使用Eloquent Javascript.我终于摸了一会儿后终于得到了一些东西......但它不起作用!我不太确定我是否从正确的角度接近这个但我确实知道我想使用循环来跟踪基于#的网格的打印进度.

编写一个程序,创建一个代表8×8网格的字符串,使用换行符分隔行.在网格的每个位置处都有空格或"#"字符.角色应该形成棋盘.将此字符串传递给console.log应该显示如下内容:

 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

    var chessBoard = "";
    var size = 8;

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

        if (lineCounter%2 === 0) { /

/if lineCounter is an even number
        for (var charCounter = 1; charCounter < size; charCounter++) {
            var evenOdd = (charCounter%2 === 0);
            switch (evenOdd) {
                case true:
                    (chessBoard += "#");
                    break;
                case false:
                    (chessBoard += " ");
                    break;
                }
            }                   
        }
    else { //if lineCounter is an odd number
        for (var charCounter = 1; charCounter < size; charCounter++) {
            var evenOdd = (charCounter%2 === 0);
            switch (evenOdd) {
                case true:
                    (chessBoard += " ");
                    break;
                case false:
                    (chessBoard += "#");
                    break;
            }
            }                       
        }   
    chessBoard += "\n";
    }
    console.log(chessBoard);
Run Code Online (Sandbox Code Playgroud)

该程序的当前输出是这样的:

# # # #
 # # # 
# # # #
 # # # 
# # # #
 # # # 
# # # #
Run Code Online (Sandbox Code Playgroud)

通过一些迭代,我已经学到了很多东西,但是现在我已经看到了一个错误 - 我明显是一个7x7网格,而不是我想要的8x8网格.我怀疑它与我在for循环中使用"<"有关,但不确定是否有更好的方法来解决这个问题,而不仅仅是添加一个额外的数字.

mai*_*man 12

实际上你需要制作两个循环非常容易,每个循环一个,另一个用于选择你想要console.log的元素(''或'#').

通过解决方案检查评论

var size = 8; //this is the variable setting

var board = "";//this is the empty string we're going to add either ' ' , '#' or newline

for (var y = 0; y < size; y++) {   /*in the outer loop we add newline to seperate rows*/
  for (var x = 0; x < size; x++) {/*every inner loop rappresents a line, and alternatively it's adding either ' ' or '#' to the string that's being populated*/
    if ((x + y) % 2 == 0)
      board += " ";
    else
      board += "#";
  }
  board += "\n";
}

console.log(board);
Run Code Online (Sandbox Code Playgroud)

  • 为什么是(x+y)呢?这部分怎么理解呢? (3认同)

Ric*_*ock 5

这是一种不同的方法.

每行有四个实例_##_(其中下划线是空格).

偶数行开头,_#奇数行开头#_:

var chessBoard= '',
    size= 8,
    c;

for(var i = 0 ; i < size ; i++) {
  c= i%2 ? '# ' : ' #';
  for(var j = 0 ; j < size/2 ; j++) {
    chessBoard+= c;
  }
  chessBoard+= '\n';
}

console.log(chessBoard);
Run Code Online (Sandbox Code Playgroud)


Tra*_*s J 5

jsFiddle Demo

我下棋的粉丝:)在国际象棋中,有规则的“白右边”,这意味着我们的国际象棋棋盘的第一方阵将是“”。此后,每次在行和列之间出现奇数匹配时,它将交替进行。

var board = "";
for(var i = 0; i < 8; i++){
 for(var a = 0; a < 8; a++){
  board += (a % 2) == (i % 2) ? " " : "#";
 }
 board += "\n";
}
Run Code Online (Sandbox Code Playgroud)

查看电路板,它现在显示一个 8x8 网格

console.log(board);

 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
Run Code Online (Sandbox Code Playgroud)

随意替换i行号或a列号。或者将两者都设置为一个大小 :) 它仍然可以工作。例如,a < 20将给出 20 列

 # # # # # # # # # #
# # # # # # # # # # 
 # # # # # # # # # #
# # # # # # # # # # 
 # # # # # # # # # #
# # # # # # # # # # 
 # # # # # # # # # #
# # # # # # # # # # 
Run Code Online (Sandbox Code Playgroud)