用数字和星号在JavaScript中构建正方形

时间:2018-07-23 11:35:49

标签: javascript for-loop nested-loops

我需要您的帮助,我应该完成使用javascript中的for循环创建正方形的任务。但是我不能得到确切的一个。请帮我!这是最终输出的示例:

* 2 3 4 5<br>
* * 3 4 5<br>
* * * 4 5<br>
* * * * 5<br>
* * * * *<br>
我正在尝试此解决方案,但str正在乘以其ef,而不是减小。

var n = 5;
var star = "";
var str = '';
var triangle = "";
for(i = 1; i <= n; i++ ){
    star += "* ";
  for (j = 4; j >= 1; j--){
    str += j + " ";
    triangle = star + str;
}console.log(triangle);
}

1 个答案:

答案 0 :(得分:0)

代码中的当前逻辑存在一些问题。第一个也是最引人注意的问题是,您在循环外部初始化了变量str,并且在内部循环内部向其追加了字符。这给您带来了不希望的效果,因为在循环访问时不会重置字符串的值,它只是追加了更多的字符,这些字符本身就“相乘”。因此,要解决第一个问题,您只需将str变量的声明移到外部循环中即可。

var n = 5;
var star = "";
var triangle = "";
for(i = 1; i <= n; i++ ){
    var str = "";
    star += "* ";
  for (j = 4; j >= 1; j--){
    str += j + " ";
    triangle = star + str;
}console.log(triangle);
}

现在代码输出如下:

* 4 3 2 1 
* * 4 3 2 1 
* * * 4 3 2 1 
* * * * 4 3 2 1 
* * * * * 4 3 2 1 

那还是不希望的。现在还有两个问题。数字是递减计数而不是递增计数。并且始终显示其中四个。通过固定内部循环,可以用一块石头解决这两个问题:

var n = 5;
var star = "";
var triangle = "";
for(i = 1; i <= n; i++ ){
    str = "";
    star += "* ";
  for (j = i + 1; j <= n; j++){
    str += j + " ";
    triangle = star + str;
}
console.log(triangle);  
}

这给我们留下了最终错误,即最后一行的打印与第四行'* * * * 5'相同,因为设置三角形的行在循环内,并且在最后一次迭代时未到达循环。最终解决方案在这里:

var n = 5;
var star = "";
var triangle = "";
for(i = 1; i <= n; i++ ){
    str = "";
    star += "* ";
  for (j = i + 1; j <= n; j++){
    str += j + " ";
}
triangle = star + str;
console.log(triangle);  
}