2014-02-19 34 views
2

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

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 =“#”+结果),函数在生产:

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

看起来正确的,但果真如此吗?为什么第一行以散列开头?如果内环路检查,看看(I + J)是什 - 最后一个字符是(1 + 8)右 - ?然后使用

result = " " + result; 

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

最后,如果我用的是结果=结果+ =为了在内部循环的语句,但结果=“\ n” +导致外环,我得到这个:

" 







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

什么在这里发生?非常感谢帮忙。

+0

好了好了向我们展示一个示例答案。预期的结果是什么,运行前需要什么输入。 – MJoraid

+0

网格应该看起来像我的第二个例子中的模式。 – user2891518

+0

但是你的代码已经在你的第二个示例中产生了这个模式。我很迷茫。 – MJoraid

回答

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) 至于你说的第一行没有正确对齐,因为报价的,所以你需要一个新的行字符添加到开始。

在第二个集合中,你正在做的是预先考虑字符串本质上是向后建立它。在每次执行之后,而不是在字符串末尾添加#或'',而是将其放在开头。最后,将换行符预先添加到字符串的开始位置,使其开始换行。

+0

鉴于我正在向后建设它,为什么它开始与哈希?我理解内部循环会产生一个9,因此也就是最后一个角色的空白空间 - 在这种情况下会被放置在开始处。我误解了什么? – user2891518

+0

在第一个循环i = 1,并且j = 1 i + j = 2 2%2 == 0所以它以散列开头 – Nimnam1

+0

在第二个?它从后面建造,对吧?那么散列应该不是第一行的最后一个字符,而不是空格? – user2891518

0

为什么第一行以散列开头?

在内环:

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

在第一次运行,i1j1,所以1+1 = 2和它发生2%2==0这样的情况是真实的,因此,你会得到一个#开头。

+0

但是它是结果+ =“”还是结果=“”+结果?当然,我在第一次运行时会得到哈希值,但在最后一次运行中我不应该得到空白吗?如果我使用第二个结果语句,不应该将空格作为字符串中的第一个字符吗? – user2891518

+0

我认为这取决于你开始的大小,如果它是即使那么你将以i = 1开始并以i <=大小结束时以偶数结束。因此,第一个条件将比第二个条件多运行一次。 – MJoraid

+0

我试图从我的萤火虫控制台,所以我没有得到任何“”,它看起来很对齐。 – MJoraid

2

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

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的大小。每隔一段时间,它为董事会增添一条新线。

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

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' 
} 

我希望它能帮助:)