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);
}
如何编写带有嵌套 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);
}