我希望有人可以帮我找到一种使用嵌套for循环垂直打印数组的方法。例如,我有
显示它应该是什么样子。不是那个数组的所有东西都应该是零并且网格的尺寸是10x10,与我附加的图像不同。
我想知道如何在一个网格(零网格)中打印多个数组,但知道如何垂直打印一个数组足够了!我正在使用javascript。
我很肯定我的方向是错误的。
答案 0 :(得分:0)
试试这个:
function printGrid(){
var ships = [[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5], [1,2,3,4,5,6], [1,2,3,4,5,6,7], [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8,9]];
var htmlResult = "";
var size = 10;
normalizeArrayForRows(size, ships);
for(var r = 0; r < size; r++){
normalizeArrayForCols(size, ships[r]);
for(var c = 0; c < size; c++){
htmlResult += ships[r][c] + " ";
}
htmlResult += "<br />"
}
document.getElementById("grid").innerHTML += htmlResult;
}
function normalizeArrayForRows(size, thearray){
if (thearray.length < size){
for(var i = thearray.length; i < size; i++){
thearray[i] = [];
}
}
}
function normalizeArrayForCols(size, thearray){
if (thearray.length < size){
for(var i = thearray.length; i < size; i++){
thearray[i] = 0;
}
}
}
printGrid();
<div id="grid">
</div>
答案 1 :(得分:0)
function start(){
var ships = [[5,5,5,5,5],[4,4,4,4],[3,3,3],[2,2],[3,3,3]];
var foo = Math.floor(Math.random() * 10 + 1);
for(var x=0; x<10; x++){
var lngth = ships.length;
if(lngth<10){
var p = 10 - lngth;
var rm = new Array(p);
for(var i = 0; i<p; i++){
rm[i] = 0
}
ships.push(rm);
}
for(var y=0; y<10; y++){
var lngth1 = ships[x].length;
alert(lngth1);
if(lngth1<10){
var p = 10 - lngth1;
for(var i = 0; i<p; i++){
ships[x].push(0);
}
}
document.getElementById("grid").innerHTML += ships[x][y];
}
document.getElementById("grid").innerHTML += "</br>";
}
}
start();
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
</script>
<title></title>
</head>
<body>
<div id="wrapper">
<h1 id="grid"></h1>
</div>
</body>
</html>
答案 2 :(得分:-1)
你不一定朝着错误的方向前进。 2嵌套for循环是你想要做的很好的天真实现。
事实上,您已编写的代码中的一小部分更改将以零的矩阵输出一列垂直值:
将+= " 0"
替换为+= (" " + (x===2 ? "ARRAY".substr(y,1) : "0"))
。
原始代码的基本思想是遍历每一列,然后遍历该列的每一行。但是,您将在列的每一行中输出零。如果要更改任何特定单元格中的行为,只需添加if语句以检查您是否在正确的行或列中,然后相应地更改打印的值。
在下面的代码片段中,我更改了y和x的顺序;然后在每一行,当在第2列(x===2)
时,我告诉它输出单词数组"ARRAY".substr(y,1)
的第y个字母。这实现了您在图片中发布的内容:
var ships = [[5,5,5,5,5],[4,4,4,4],[3,3,3],[2,2],[3,3,3]];
var foo = Math.floor(Math.random() * 10 + 1);
for(var y=0; y<10; y++){
document.getElementById("grid").innerHTML += "<br />";
for(var x=0; x<10; x++){
document.getElementById("grid").innerHTML += (" " + (x===2 ? ("ARRAY".substr(y,1) || "0") : "0"));
}
}
&#13;
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
</script>
<title></title>
</head>
<body>
<div id="wrapper">
<h1 id="grid"></h1>
</div>
</body>
</html>
&#13;
如果您想在单元格中打印其他内容,只需更改if语句以根据X和Y值决定要打印的内容。
编辑:
已将"ARRAY".substr(y,1)
更改为("ARRAY".substr(y,1) || "0")
;所以当'&#34; ARRAY&#34;完成打印,它只会打印&#34; 0&#34;对于该栏的其余部分;匹配你的照片。
澄清:
(x===2 ? ("ARRAY".substr(y,1) || "0") : "0")
是&#34的简写;如果x等于2:输出#34; ARRAY&#34;中的第y个字符。或&#34; 0&#34;如果失败了;否则,IF x不等于2:输出&#34; 0&#34;。