今天复习使用嵌套for来完成一些任务,于是想着打印一些图形来练习
思考感悟
长方形
行数 和 每行的星星数嵌套遍历即可
平行四边形
核心:每行空格数=总行数-行数
行数 | 空格数 |
---|---|
1 | 3 |
2 | 2 |
3 | 1 |
三角形
核心:每行星星数=2*当前行数-1
行数 | 星星数 |
---|---|
1 | 1 |
2 | 3 |
3 | 5 |
4 | 7 |
菱形
核心:每行空格数=行数
行数 | 空格数 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
核心:每行星星数=7-2*当前行数
行数 | 星星数 |
---|---|
1 | 5 |
2 | 3 |
3 | 1 |
空心菱形
核心:首尾有星星
public class Demo{public static void main(String[] args){//长方形//s1();//增加边框//s2();//平行四边形//s3();//三角形//s4();//菱形//s5();//空心菱形s6();}static void s1(){for(int b=1;b<=4;b++){System.out.println();for(int a=1;a<=7;a++){System.out.print("*");} } }static void s2(){for(int b=1;b<=4;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int a=1;a<=7;a++){System.out.print("*");} } }static void s3(){for(int b=1;b<=4;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=4-b;d++){System.out.print(" ");}for(int a=1;a<=7;a++){System.out.print("*");} } }static void s4(){for(int b=1;b<=4;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=4-b;d++){System.out.print(" ");}for(int a=1;a<=b*2-1;a++){System.out.print("*");} } }static void s5(){for(int b=1;b<=4;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=4-b;d++){System.out.print(" ");}for(int a=1;a<=b*2-1;a++){System.out.print("*");} }for(int b=1;b<=3;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=b;d++){System.out.print(" ");} for(int a=1;a<=7-2*b;a++){System.out.print("*");} }}static void s6(){for(int b=1;b<=4;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=4-b;d++){System.out.print(" ");}for(int a=1;a<=b*2-1;a++){if(a==1 || a==b*2-1){System.out.print("*"); }else{System.out.print(" "); }} }for(int b=1;b<=3;b++){System.out.println();for(int c=1;c<=5;c++){System.out.print(" ");}for(int d=1;d<=b;d++){System.out.print(" ");} for(int a=1;a<=7-2*b;a++){if(a==1 || a==7-2*b){System.out.print("*"); }else{System.out.print(" "); }} }}
}
进阶思路
- 将菱形看成正方形;
- 中轴线和,向两侧展开的区间总是有
*
; - 设定两个点,从中轴开始依次往两处递增或递减;
- 上半部分区间由小变大,下半部分区间由大变小;
public class Demo{public static void main(String[] args){int size=17; //自定义大小int leftNum=size/2+1;int rightNum=size/2+1;boolean flag= true; //标识上半部分还是下半部分for(int i=1; i<=size;i++){for(int j=1;j<=size;j++){if(j>=leftNum && j<=rightNum){ //实心菱形条件//空心菱形条件 j==leftNum || j==rightNumSystem.out.print("*");}else{System.out.print(" ");}}System.out.println();if(leftNum==1){flag = false;}if(flag){leftNum--;rightNum++;}else{leftNum++;rightNum--;}}}
}