我希望有人能帮我找出一种使用嵌套for循环垂直打印数组的方法。例如,我有

来展示它应该是什么样子。不是那个数组的所有东西都应该是零,网格的尺寸是10x10,与我附加的图像不同。
我想知道如何在一个网格(零的网格)中打印多个数组,但知道如何垂直打印一个数组就足够了!我使用的是javascript。

我确信我走错了方向。
发布于 2015-11-11 14:12:04
试试这个:
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>
发布于 2015-11-11 14:45:06
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>
发布于 2015-11-11 13:57:20
你不一定走错了方向。2嵌套的for循环很好地实现了您想要做的事情。
实际上,您已经编写的代码中的一小部分更改将以零矩阵的形式输出一列垂直的值:
用+= (" " + (x===2 ? "ARRAY".substr(y,1) : "0"))替换+= " 0"。
原始代码的基本思想是遍历每一列,然后遍历该列的每一行。但是,您随后会在列的每一行中输出一个零。如果您想要更改任何特定单元格中的行为,只需添加一条If语句来检查您所在的行或列是否正确,然后相应地更改您打印的值。
在下面的代码片段中,我更改了y和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"));
}
}<!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>
如果要在单元格中打印其他内容,只需更改If语句,以根据X和Y值决定要打印的内容。
编辑:将数组更改为("ARRAY".substr(y,1) || "0");,这样当“"ARRAY".substr(y,1)”完成打印时,它将只为该列的其余部分打印"0“;以匹配您的图片。
说明:(x===2 ? ("ARRAY".substr(y,1) || "0") : "0")是“如果x等于2:输出"ARRAY”中的第y个字符,否则输出"0“的缩写;否则,如果x不等于2:输出"0”。
https://stackoverflow.com/questions/33644718
复制相似问题