javascript - 无法迭代 while 语句
问题描述
新手问题。要有耐心。
作为一个练习,我试图通过附加到 innerHTML 来创建一个网格。
我无法让循环在第一次迭代之后重复。我确定这是一些基本的东西,但我必须从某个地方开始。
我试过用“let”代替“var”,用console.log代替document...,用谷歌搜索几个小时......
var originalSize = 8;
var sizeGrid = 0;
var heightGrid = 0;
var switchChar = 2;
var switchCharTwo = 1;
var charOne = "x";
var charTwo = "#";
while (heightGrid <= originalSize){
document.getElementById("el").innerHTML+="<br>";
if (switchChar % 2 === 0){
switchCharTwo = 1;
}
else {
switchCharTwo = 2;
}
while (sizeGrid <= originalSize){
if (switchCharTwo % 2 === 0){
document.getElementById("el").innerHTML+=charOne;
}
else {
document.getElementById("el").innerHTML+=charTwo;
}
sizeGrid = sizeGrid + 1;
switchCharTwo = switchCharTwo + 1;
}
heightGrid = heightGrid + 1;
switchChar = switchChar + 1;
}
<html>
<body>
<p id="el"></p>
</body>
</html>
我想要的是:
#*#*#*#*#
*#*#*#*#*
#*#*#*#*#
等取决于网格的大小。
我得到的只是上面的一行。
解决方案
您的代码包含两个循环,其中一个嵌套在另一个循环中。
您的嵌套循环将在第一次迭代中运行,同时满足给定条件sizeGrid <= originalSize
. 然而,在主循环的所有后续迭代中,已经满足给定条件。该值未在循环之间重置,因此嵌套循环不会再次运行。
这可以通过sizeGrid
在主循环中移动变量声明来快速更新来解决:
while (heightGrid <= originalSize) {
var sizeGrid = 0;
但是,鉴于您要实现的目标,您可以使用不同的循环类型将其压缩。
您实际上已经手动编写了一个 for 循环。您设置起始计数器值,运行循环,然后增加您的计数器。这是我建议的方法:
for (let heightGrid = 0; heightGrid <= originalSize; heightGrid++) {
... logic here
// nested loop
for (let sizeGrid = 0; sizeGrid <= originalSize; sizeGrid++) {
// nested logic
}
}
但是,您必须小心比较。尽管 originalSize 为 8,但您的原始循环迭代 10 次。上面的 for 循环实际上将运行 9 次,这似乎与您正在寻找的输出相匹配。我倾向于调整您的编号,以便更清晰。
这是我想出的粗略方法:
const gridSize = 9;
const gridChars = ['x', '#'];
let gridCharCounter = 0;
for (let rows = 0; rows < gridSize; rows++) {
for (let columns = 0; columns < gridSize; columns++) {
const charKey = gridCharCounter % gridChars.length;
document.getElementById("el").innerHTML += gridChars[ charKey ];
gridCharCounter++;
}
document.getElementById("el").innerHTML += '<br />';
}
推荐阅读
- reactjs - 如何在没有延迟的情况下一次调用客户端获取 10,000 条数据?
- reactjs - 当我的软键盘在我的科尔多瓦应用程序中打开时(基于 react JS),如何在屏幕的其他部分启用触摸?
- python - 有没有什么工具可以让我运行 python 笔记本而不用担心笔记本电脑关闭?
- go - Go Programming Language 一书示例中的 goroutine 泄漏
- linux-device-driver - 将 midi 键盘连接到拱形安装时遇到问题。杰克问题显然
- django - 选择除一个 Django 之外的所有字段
- c++ - 使用 ASIO 聊天服务器/客户端,找不到客户端示例代码
- r - R:返回我的函数中的对象列表不返回预期列表
- mysql - 将 Xamarin.Forms 与 MySQL 数据库连接时出现连接错误
- haskell - Haskell 类型约束