编写一个程序,创建一个代表8×8网格的字符串,使用换行符分隔行。在网格的每个位置处都有空格或“#”字符。角色应该成为棋盘。
我的代码不断创建一个包含所有哈希值的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 :(得分:1)
通过同时使用altern
和character % 2
,您可以选择带#every迭代的分支。只使用其中一个。
答案 1 :(得分:1)
在找到OP的代码之前,我不知道该如何回答。这是我发现可以使用的内容:
var size = prompt("What is the size?");
var str = "";
var line = 0;
//Instead of using 1, use 0. It'll make sense in the next comment.
while (line < size) {
var character = 0; // Changed this to 0 as well.
while (character < size) {
if (line % 2 === 0){
/*Instead of using logic negate(altern = !altern), you could use one of the variables
you already have. Changing line = 1 to line = 0, we now can write the conditon above.
Where the first line holds true, because 0 % 2 === 0 is true.*/
if (character % 2 === 0) {
str += " "; // I switched the string values around, to get what is resembled in the book.
console.log(character);
console.log(str);
} else {
str += "#"; // Here
console.log(character);
console.log(str);
}
} else {
if (character % 2 === 0) {
str += "#"; // Here
console.log(character);
console.log(str);
} else {
str += " "; // Here
console.log(character);
console.log(str);
}
}
character++;
}
str += "\n";
line++;
}
alert(str);
//Changed this so the final result is easier to see, rather than in the jumbled mess of the console.
答案 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;
}
答案 3 :(得分:0)
下面有一个可以工作,但我用Os(大写o)替换了空格,并且代码稍有变化。
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所说的内容。
答案 4 :(得分: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')
答案 5 :(得分:0)
而不是基于位置(即使是奇数)的while循环和过度重复你的案例,使用两个for循环和一个case语句来确定一个位置是否需要#vs&#34; &#34 ;.将它们存储到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);
董事会产出:
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
答案 6 :(得分:0)
我本来可以通过以下方式解决此问题的:首先使用while循环打印出一行8个苛刻(########)符号,然后使用另一个循环将其垂直重复8次,并编写一个测试条件,当两个迭代的值均为偶数时,更改y的值。
const size = 8
for(let i = 0; i < size; i++){
let y = " "
let cols = 0;
if(i % 2 == 0){
y = "";
}else{
y = " ";
}
while(cols < size){
if( cols % 2 == 0){
y = y + "#"}
else{
y = y + " "
}
rows++
}
console.log(y)
}
答案 7 :(得分:-1)
要实现的基本要点是,给定 N 行,如果N为奇数,则其第一个方块将为黑色,否则为白色。
另外,如果给定行的第一个方格是黑色,那么对于给定的列 M ,如果M是奇数,则方形将是黑色,如果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
答案 8 :(得分:-2)
我目前也在学习JavaScript。我坚持了一天。我认识到的唯一一件事是,如果您想在JavaScript中做一些有用的事情,请使用循环。
我对复杂的编码一无所知,但是循环可以轻松地完成工作,乍一看似乎很复杂。
这是我的版本:
让b =“” // **只需创建一个空字符串,因为如果您不这样做,循环将在单列中打印出符号,数字等,但是如果使用空字符串,您以后可以在该字符串中写入符号,从而使您可以水平扩展字符串
让大小= 8 // **由于循环从0开始到无穷大,因此必须将其考虑在内
for(让i = 0; i
{b = b +“#”} // **这是上面清楚描述的第一个循环的正文
for(让a = 0; a
{
if(a%2 == 0) // **只是条件,它使我们可以分配不同的字符串(行)代码(希望您理解括号内的内容
{console.log(“” + b)} // **由于我们要查看棋盘,因此应将其打印到屏幕上,因为我们使用了“ console.log”,但再次注意,在这里我们不会更改变量“ b”的值,我们只是对其进行操作,但是它将保持不变“ #########”
其他{
console.log(b)} // **如果“ if”失败,我们将继续使用“ #########”值,这是“ b“变量
}