javascript用字符串创建网格

时间:2014-02-19 01:51:41

标签: javascript string console.log

我是所有这一切的新手,并通过Eloquent JS工作。我的目标是创建一个给定大小的棋盘/网格的字符串,其中的空格由交替的哈希和空白组成。我不太明白

1。)正确解决我的问题

2。)当我对代码进行某些更改时发生了什么

这似乎应该是正确的答案,但由于逗号,控制台中的第一行未正确对齐:

function chessBoard (size) {
result = "";
for (var i = 1; i <= size; i++) {
  for (var j = 1; j <= size; j++) {
    if ((i + j) % 2 == 0 ) {
      result = result + "#";        
  } else {
    result = result + " ";
    }

 }

result = result + "\n"
}
console.log(result);
}  

chessBoard(8);

"# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
"

如果我在循环中更改了所有3个结果语句,以便散列,空格和换行符放在+运算符的另一侧(result =“#”+ result),则该函数会生成:

"
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #"

看起来是正确的,但是吗?为什么第一行以哈希开头?如果内循环检查是否(i + j)是偶数 - 最后一个字符是(1 + 8)对吗? - 然后使用

result = " " + result;

将最后一个字符添加到字符串中,为什么字符串开头不是那个字符?

最后,如果我对内部循环中的语句使用result = result + = order,但结果=“\ n”+结果在外部循环中,我得到:

"







# # # #  # # # ## # # #  # # # ## # # #  # # # ## # # #  # # # #"

这里发生了什么?非常感谢你的帮助。

4 个答案:

答案 0 :(得分:1)

我将尝试解释解决方案中的代码是如何工作的。

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);

所以你在循环中有一个循环。第一个/外部循环控制换行符,内部循环控制是否打印#或''(空格)(也称为添加到电路板变量)。

基本上,帮助我的是想象内循环变得狂野并添加空格和# 而外部循环每8次(或任何大小变量)只能“做”某事(换行)。

所以内循环运行并添加字符。同时,外环仅增加y尺寸。每隔一段时间,它就会给董事会增加一条新线。

我正在研究循环的可视化,以便我能更好地理解它们。

答案 1 :(得分:0)

为什么第一行以哈希开头?

在内循环中:

(i + j) % 2 == 0 ) 
   result = result + "#";      

在第一次运行时,i1j1,因此1+1 = 2发生了2%2==0因此条件是真的,因此你将在一开始就得到#。

答案 2 :(得分:0)

1)

function chessboard(size){
    var i=0, _size=size*size, output='';
    for(;i<_size; i++){ 
        // add a new line if we need two
        if (i % size === 0)
               output= output +'\n' ;

        // determine whether we need a hash or a space
        output = output + (i%2 ? '#': ' ');     
    }
    // append a new line at the end for proper formatting.
    return output + '\n'
}

2) 正如您所说,由于引号,第一行未正确对齐,因此您需要在开头添加新行字符。

在第二组中你正在做的事情是在字符串前面基本构建它。每次执行后,而不是添加#或&#39; &#39;在字符串的末尾,你将它放在开头。最后,将换行符添加到字符串的开头,使其从新行开始。

答案 3 :(得分:0)

我使用Nimnam的解决方案进行了一些修正,以实现第二个示例模式(我在代码中添加了一些额外的注释):

function chessboard(size){
    // You have to multiply the (grid*1) * grid because the '\n' character. 
    // i.e If you have a 8 grid would need 72 grids (64 + 8 = 72) because each 
    // line would need a /n character, totaling 9 grids for each line.

    var i=0, _size=(size+1)*size, output='';
    for(;i<_size; i++){ 
        // add a new line if we need two
        // now we have to add +1 to the size because the 9º character;
        if (i % (size + 1) === 0)
           output= output +'\n' ;

        // determine whether we need a hash or a space
        // I inverted the character order to achieve the correct pattern
        output = output + (i%2 ? ' ': '#');     
    }
    // append a new line at the end for proper formatting.
    return output + '\n'
}

我希望它有所帮助:)