打印一个5行三角形
方法一:
public class TestDemo01 {
public static void main(String[] args) {
int outLeft = 5;
int outRight = 5;
for (int row = 0; row < 5; row++) {
for (int i = 1; i <= 9; i++) {
if (i >= outLeft && i <= outRight) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
--outLeft;
++outRight;
System.out.println();
}
}
}
我的思路是先在excel里画了一个三角形,然后知道了每行分别应该打印多少的星号多少的空格。如图所示:
所以可以看到每行分别应该打印1、3、5、7、9个*号。
然后从中间的第5个字符位置开始向左右打印星号,其他的字符位置打印空格。
最后效果如图:
方法二:
public class TestDemo02 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
方法二的思路是:设想要打印的三角形是在一个正方形中剪切出来的。
如图,里层第一个for循环先打印这个三角形(实际应该打印空格):
然后打印第二个三角形,这个三角形其实就是第一个三角形的中心对称,因此里层第二个for循环条件就是第一个的对称,如图所示:
然后再打印第三个三角形,如图所示(因为前面两个循环注释掉了,所以这个三角形的实际位置应该是在前面两个三角形的右边):
最后的整体效果如图: