For 循环计数 1 到 10 然后 10 到 1 交替,用字母连接

For loop count 1 to 10 and then 10 to 1 alternatively, concatenated with a letter

如何编写带有嵌套 for 循环的代码,并给出以下结果:

W,1,1
W,1,2
W,1,3
W,1,3
W,1,2
W,1,1
W,2,1
W,2,2
W,2,3
W,2,3
W,2,2
W,2,1
etc...

注意:这些数字不一定都是奇数和偶数,它们可能是小数,但为了简化所以在这里

我试过了,但结果不对:

var lon,lat,str ='',i = 0;

    for(lat=1; lat<=2; lat++)
    {
    if((i%2)==0){

        for(lon=1; lon<=3; lon++)
           {

            str+="W,"+lat+","+lon+"\n";
            console.log(str)
           }
               }
    else{

         for(lon=3; lon>=1; lon--)
           {

            str+="W,"+lat+","+lon+"\n";
            console.log(str)
           }
              }
                i++;   
         }

我想,我会取一个变量 i 作为中间值,每个时间循环它要么是奇数要么是偶数通过递增,然后用 If.. .Else我会决定什么时候应该向前或向后计算。

任何想法

请使用 Java 或 Java 脚本编码,thx

使用嵌套 for-loop.

第一个嵌套for-loop结束后,从相反方向开始第二个。

let generate = (length) => {
  let artifacts = [];
  for (let i = 1; i <= length; i++) {
    let j;
    for (j = 1; j <= length; j++) {
      artifacts.push(`W,${i},${j}`);
    }

    for (--j; j > 0; j--) {
      artifacts.push(`W,${i},${j}`);
    }
  }
  
  return artifacts;
}

let array = generate(6);
console.log(array);
.as-console-wrapper {
  max-height: 100% !important
}

如果使用中间数组存储内部循环数据,然后在内部循环之后,将其与结果及其 "reversed" 数据连接,则可以使用单个嵌套循环执行此操作。

var precision = 5,
  tmp = [],
  res = "",

  latStart = 10.1,
  latInc = 0.1,
  latTarg = 10.8,

  lonStart = 1.1,
  lonInc = 0.2,
  lonTarg = 2.4;

for (var latI = latStart; latI <= latTarg; latI=+(latI+latInc).toFixed(precision)) {
  tmp.length = 0;
  for (var lonI = lonStart; lonI <= lonTarg; lonI=+(lonI+lonInc).toFixed(precision)) {
    tmp.push("W," + latI + "," + lonI + "\n");
  }
  res += tmp.join("") + tmp.reverse().join("");
}

console.log(res);

有时解决问题的好方法是分步解决。例如,您可以创建一个向上计数的方法和一个向下计数的方法。这样做不仅可以使问题更容易解决,还可以帮助使代码更易读和更容易理解:

var lat = 1, long = 1, latMax = 2, c = "W";

function countLongUp(max) {
  for(; long < max; ++long) print();
  print();  
}

function countLongDown(min) {
  for(; long > min; --long) print();
  print();  
}

function print() {
  console.log(c + "," + lat + "," + long);
}

for(; lat <= latMax; ++lat) {
  countLongUp(3);
  countLongDown(1);
}