代码之家  ›  专栏  ›  技术社区  ›  Moaaz Bhnas

使用嵌套循环构建三角形

  •  1
  • Moaaz Bhnas  · 技术社区  · 7 年前

    我正在尝试使用嵌套循环构建一个三角形。

    var line, triangle;
    line = triangle = "";
    
    for (var row = 1; row <= 7; row++) {
      for (var x = 0; x < row; x++) {
        line += "#";
      }
      triangle += line + "\n";
    }
    
    console.log(triangle);

    我希望每一行只比最后一行多一个“#”,如下所示:
    enter image description here

    但这是我得到的结果:
    enter image description here

    6 回复  |  直到 7 年前
        1
  •  2
  •   epascarello    7 年前

    代码这样做的原因是您正在更新 line 在每次迭代中,您都会不断追加。如果要执行嵌套循环,则每次在外部循环中时都需要重置变量行。

    var line, triangle;
    line = triangle = "";
    
    for (var row = 1; row <= 7; row++) {
      line =""
      for (var x = 0; x < row; x++) {
        line += "#";
      }
      triangle += line + "\n";
    }
    
    console.log(triangle);

    或者,您可以保留现有内容并转储内部循环,每次迭代只需向行中添加一个字符。

    var line, triangle;
    line = triangle = "";
    
    for (var row = 1; row <= 7; row++) {
      line += "#";
      triangle += line + "\n";
    }
    
    console.log(triangle);
        2
  •  2
  •   Suren Srapyan    7 年前

    您需要在每次嵌套迭代之前清空行。没有这个,你只有一行,每次都会连接新的项目。你也可以离开 line 变量,只需使用 triangle .

    var triangle = '';
    
    for (var row = 1; row <= 7; row++) {
      for (var x = 0; x < row; x++) {
        triangle += "#";
      }
      triangle += "\n";
    }
    
    console.log(triangle);

    您也可以使用 String#repeat

    var triangle = '';
    
    for (var row = 1; row <= 7; row++) {
      triangle += '#'.repeat(row) + '\n';
    }
    
    console.log(triangle);
        3
  •  2
  •   Akaki Khotcholava    4 年前
    function triangle(num) {
    for(let i = '#'; i.length < num; i+='#') {
        console.log(i)
     }
    }
    
        4
  •  1
  •   Vyacheslav    7 年前

    请尝试以下代码:

    function generatePyramid() {
        var totalNumberofRows = 7;
        var output="";
        for (var i = 1; i <= totalNumberofRows; i++) {
            for (var j = 1; j <= i; j++) {
                output+= "#  ";
            }
            print(output);
            output="";
        }
    }  
    generatePyramid();
    

    工作原理: http://rextester.com/ULY85622

        5
  •  1
  •   ionizer    7 年前

    编辑:只需添加一行即可修复-您需要在每行迭代后重新初始化变量“line”

    var line, triangle;
    line = triangle = "";
    
    for (var row = 1; row <= 7; row++) {
      line="";
      for (var x = 0; x < row; x++) {
        line += "#";
      }
      triangle += line + "\n";
    }
    
    console.log(triangle);
        6
  •  1
  •   Giovanni Benussi    4 年前

    你需要重置 line 在每个循环之后,因为它正在累积所有 # 在每个循环中:

    var line, triangle;
    line = triangle = "";
    
    for (var row = 1; row <= 7; row++) {
      line = "" // Add this line
      for (var x = 0; x < row; x++) {
        line += "#";
      }
      triangle += line + "\n";
    }
    
    console.log(triangle);

    您的代码不正确,因为该行在每个循环中都遵循以下步骤:

    • 第1行: 线 以“”开头,以“”结尾 # (添加 # )
    • 第2行: 线 开始为 # 并结束为 ### (添加 ## )
    • 第3行: 线 开始为 ### 并结束为 ###### (添加 ### )
    • 第4行: 线 开始为 ###### 并结束为 ########## (添加 #### )
    • 第5行: 线 开始为 ########## 并结束为 ############### (添加 ##### )
    • 第6行: 线 开始为 ############### 并结束为 ##################### (添加 ###### )
    • 第7行: 线 开始为 ##################### 并结束为 ############################ (添加 ####### )