我正在尝试制作一个由星星组成三角形的程序,如下所示:
*
**
***
****
*****
******
*******
我以为自己有它,但是在代码中的某个地方我犯了一个逻辑错误,而不是减少星号之前的空格数量,而是将它们保持在前面,所以看起来像这样
*
**
***
****
*****
******
*******
我的代码:
System.out.print("Give a positive odd integer: ");
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int cnt1 = 0;
int cnt2 = 0;
int cnt3 = 0;
int line = N - 1;
char c1 = '*';
char c2 = ' ';
StringBuilder sb = new StringBuilder();
if (N > 0 && N % 2 == 1) {
while (cnt1 < N){
while (cnt2 < N-line){
while (cnt3 < line){
sb.append(c2);
cnt3++;
}
sb.append(c1);
cnt2++;
}
line--;
cnt1++;
System.out.println(sb.toString());
}
}
最佳答案
您非常接近,您的代码在下面做了一些小修改:(我在循环内移动了几行):
System.out.print("Give a positive odd integer: ");
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int cnt1 = 0;
int line = N - 1;
char c1 = '*';
char c2 = ' ';
if (N > 0 && N % 2 == 1) {
while (cnt1 < N){
StringBuilder sb = new StringBuilder(); // CHANGED
int cnt2 = 0; // CHANGED
int cnt3 = 0; // CHANGED
while (cnt2 < N-line){
while (cnt3 < line){
sb.append(c2);
cnt3++;
}
sb.append(c1);
cnt2++;
}
line--;
cnt1++;
System.out.println(sb.toString());
}
}
如果输入为7,将打印以下内容:
*
**
***
****
*****
******
*******
您的问题是某些变量没有被重置。对我来说,红色标记是当我看到
cnt3
变量从未重置为0时,它只进入了该循环一次。不重置StringBuilder
会导致这些空格每次都具有相同的长度。