【问题标题】:Javascript nested FOR loopJavascript 嵌套 FOR 循环
【发布时间】:2017-01-14 16:29:15
【问题描述】:

我正在做一些 js 练习,想打印这样的东西 (不带点):

*****
****5
***45
**345
*2345

带有嵌套的 FOR 循环(或 FOR 与 IF 结合)

我的尝试:

var n = 5;
var stars = "";

for(var i=0; i<n; i++){
        stars = "";
    for(var j=i; j<n; j++){
        stars = stars + " *";
    }
    for(var k=i; k>0; k--){
        stars = stars + " " + k;
    }
    console.log(stars);
}

尽管位置是正确的,但我无法像上面的例子那样做出数字。 有什么想法吗?

【问题讨论】:

  • j=n-i 在第二个 for 循环中
  • 而 i=1 因为你想从 1 个数字开始

标签: javascript loops for-loop nested


【解决方案1】:

这是因为您将文本附加到 stars 变量而不是 lineOfStars。 ;-)

【讨论】:

  • 是的,但是我在粘贴后对其进行了编辑并且忘记了它 - 所以这不是问题,但谢谢:) pozdro:)
【解决方案2】:

这是一个矩阵。你可以用一个嵌套循环来绘制它,不能用两个,只需使用j &lt; n - i + 1条件和2个循环

var n = 5;
var lineOfStars = '';

for(var i = 1; i <= n; i++){
  
  for(var j = 1; j <= n; j++){
    
     if(j <= n - i + 1){
       
       lineOfStars += '*' ;
       
     } else{
       
        lineOfStars += j ;
       
     }
  }
  
  lineOfStars += '\n' ;
  
}

console.log(lineOfStars);

【讨论】:

    【解决方案3】:

    我能想到的最简单的答案。

    for(let i = 0; i < 5; i++){
    	let str = "";
    	
    	for(let j = 0; j < (5 - i); j++){
    		str += "*";
    	}
    	
    	while(str.length < 5){
    		str += str.length + 1;
    	}
    
    	console.log(str);
    	
    }

    【讨论】:

    • 你真的应该添加一些解释为什么这应该工作 - 你也可以添加代码以及代码本身中的 cmets - 在当前的形式中,它没有提供任何可以帮助的解释社区的其他人了解您为解决/回答问题所做的工作。这对于较早的问题和已经有答案的问题尤其重要。
    【解决方案4】:
    var n = 5;
    var stars = "";
    
    var k = n;
    for (var i=0; i<n; i++) {
      for (var j=0; j<n; j++) {
        if (j < k ) {
          stars += " *";
        } else {
          stars += " " + (j + 1);
        }
      }
      k--;
      stars += "\n";
    }
    console.log(stars);
    

    【讨论】:

      【解决方案5】:

      您的意外行为正在发生,因为您在每次迭代 i 时注销,但没有重置您的 lineOfStars 变量。

      • 由于您想从 5 开始,然后是 4 等,从概念上讲,在外循环中向下迭代可能比向上迭代更容易。
      • 由于您希望第一行以所有*s 开头,因此您需要从n + 1 开始外部迭代
      • 由于不想包含以1开头的行,所以需要在2之后(1之前)结束外层迭代
      • 因为你不想计算0,你需要从1开始你的内部迭代

      另一种方法是在完成时仅注销一次

      例如在 ES6 中

      function countingStars(n) {
          const star = '*';
          let str = '';
          
          for (let i = n + 1; i > 1; --i) {
              for (let j = 1; j < i; ++j) {
                  str += ' ' + star;
              }
              for (let j = i; j <= n; ++j) {
                  str += ' ' + j.toString();
              }
              str += '\n';
          }
          
          return str;
      }
      
      const stars = countingStars(5);
      console.log(stars);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        相关资源
        最近更新 更多