我需要您的帮助,我应该完成使用javascript中的for循环创建正方形的任务。但是我不能得到确切的一个。请帮我!这是最终输出的示例:
* 2 3 4 5<br>
* * 3 4 5<br>
* * * 4 5<br>
* * * * 5<br>
* * * * *<br>
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);
}
答案 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);
}