如何还原一个简单的JavaScript循环?

时间:2015-10-08 16:03:08

标签: javascript loops for-loop

我正在学习JavaScript的基础知识。我尝试编写一个程序,将以下方案记录到控制台:

*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*

我设法通过代码获得了上半部任务:

 var x = 5;
    var line;

    for(var i = 0; i<x; i=i+1){
        line = "";
        for(var j=0; j<x; j=j+1){
            if(j <= i){
                line = line + " * ";
            }
        }
    console.log(line);
    }

所以看起来像:

*
* *
* * *
* * * *
* * * * *

有人能给我一个提示如何获得该方案的第二部分吗?我想使用另一个循环,就像我拥有的​​循环一样,但要恢复它的动作,以便每行中的星星越来越少。

7 个答案:

答案 0 :(得分:1)

提示:您需要在for循环中递减i和j并转换<。而不是从5开始var i = 0开始。

答案 1 :(得分:1)

扰流器:

使用while循环怎么样?

var count = 0,
    i = 1,
    addition = 1,
    str = null;
while (i) {
    str = new Array(i+1).join('*');
    console.log(str);
    if (i === 5) {
        console.log(str);
        addition = -1;
    }
    i += addition;
}

答案 2 :(得分:1)

两个for循环接着另一个。第一个添加星星,第二个删除星星:

var line = "";
for (var i = 0; i < 5; i += 1) {
    line += "*";
    console.log(line);
}
for(var j = 5; j > 0; j -= 1) {
    line = line.replace(line[j], "");
    console.log(line);
}

答案 3 :(得分:0)

作为一种可能的解决方案,您可以在循环中放入另一个if子句(仔细阅读):

  

如果线索引达到金字塔的一半(最大线长),请改为开始打印maximumLineLength * 2 - index - 1

这实际上会在达到一半后改变循环的行为,因此启动次数将开始减少而不是增加

另一个解决方案是,如果你要保持字符串中的星号数量,就要添加它们直到达到maxLineLength,然后减去它们直到你回到0(你可以使用那个布尔标志。)

我没有发布实际代码以避免破坏解决方案。

答案 4 :(得分:0)

它的反模式;你为什么要这个?

尽管如此 - 累积变量:

&#13;
&#13;
var x = 5,
    y,
    line,
    result = [];

while (x--) {
    y = 5 - x;
    line = '';

    while (y--) {
        line = line + '*';
    }

    result.push(line);
}

document.write(result.join('<br>'));
document.write('<br>');
document.write(result.reverse().join('<br>'));
&#13;
&#13;
&#13;

答案 5 :(得分:0)

我认为带有条件的解决方案和带有两个循环的解决方案是您应该使用的解决方案但是可以直接计算星号的数量:

var x = 5;
var line;
for(var i = 1;i < x * 2;i++){
  line = '';
  for(var j = 0;j < Math.abs( (i+3) % 8 - 4) + 1;j++){
    line = line + ' * ';
  }
  console.log(line);
}

我使用的技巧很可能会在这里被看作有点脏,但它有效。我在这里使用的序列是1,2,3,4,5,4,3,2为了获得最后的1,我再次运行它。

一般情况下: 要获得从1到x并再次返回到1的序列(x> 1),使用Math.abs( (i+(x - 2)) % (2*x - 2) - (x - 1)) + 1运行外循环x * 2次作为内循环的上限,i从1到2x- 1。

证明留给学生练习。

答案 6 :(得分:-2)

许多解决方案都是可行的,但最简单的,就像你建议的那样,恢复循环;这是循环语句应该是什么样的:

 for(var i = x-1 ; i>=0 ; i--)

基本上你必须改变从最大值开始倒退的for循环条件,这是第一个语句部分,称为initializer;

循环必须在0停止/中断,第二部分语句称为test(直到循环满足此条件,它将在下一次迭代中继续);

语句的最后一部分是iteration update(状态应该如何在下一个循环中改变);

说更改声明你应该能够保持身体不变:

var x = 5;
for (var i = x - 1; i >= 0; i--) {
  line = "";
  for (var j = 0; j < x; j = j + 1) {
    if (j <= i) {
      line = line + " * ";
    }
  }
  console.log(line);
}