首先要分析业务逻辑:
打印10行的三角
第0行打印10个空格, 打印1个* 打印0个空格, (打印0个* 此处判断,如果i=0,就不打印*)
第1行打印9个空格 , 打印1个* 打印1个空格, 打印1个*
第2行打印8个空格, 打印1个* 打印3个空格, 打印1个*
第3行打印7个空格, 打印1个* 打印5个空格, 打印1个*
.......
第i行打印10-i个空格, 打印1个* 打印2*i-1个空格 打印1个*
最后一行,打印2*10-1个*即可
完整代码如下,验证OK,可以任意修改需要打印的行数
public class SanJiao {
public static void main(String args[]) {
int num = 10;//打印行数
printSanJiao(num);
}
private static void printSanJiao(int num) {
for (int i = 0; i < num; i++) {//打印行数
for (int n = num - i; n > 0; n--) {//打印左边的空格
System.out.print(" ");
}
System.out.print("*");//打印一个*
for (int j = 0; j < 2 * i - 1; j++) {//打印中间的空格
System.out.print(" ");
}
if(i == 0){//判断是否为第一行,如果是,就打印空,否则就打印*
System.out.println();
}else{
System.out.println("*");
}
}
for(int m=0; m<2*num+1; m++){//最后一行全部打印*
System.out.print("*");
}
}
}
2024-08-22 广告
import java.util.Arrays;
public class Triangle {
public int height;
public char CHAR_TO_PRINT = '*';
public Triangle(int height) {
this.height = height;
}
public void printTriangle() {
int width = 1 + 2 * (height -1); // 总共宽度
char[] line = new char[width]; // 每一行用一个char数组表示
for (int i = 0; i < height - 1; i++) { // 循环到倒数第2行为止
Arrays.fill(line, ' '); // 每次循环先把数组用空格填满
line[height -1-i] = CHAR_TO_PRINT; // 计算左边的*应该对应数组哪一个位置
line[width- height +i] = CHAR_TO_PRINT; // 计算右边*应该对应数组哪一个位置
System.out.println(new String(line)); // 打印这个数组
}
Arrays.fill(line, CHAR_TO_PRINT); // 最后一行全用*填充
System.out.println(new String(line)); // 打印最后一行
}
public static void main(String[] args) {
Triangle t = new Triangle(7);
t.printTriangle();
}
}