for循环打印金字塔
class Test { public static void main(String[] args) { //练习打印*组成的金子塔形 /* * *** ***** ******* */ //先分析:金子塔的数量为:1->1 2->3 3->5 4->7 内层的*数是一个等差数列公式为:an=a1+(i-1)*d 表示应该能够打印的*数 //先写固定的层数:外层表示层数,内层表示打印的*数(写死层数便于思考,以后只需修改层数就OK) int lay=4;//写在外面方便控制层数的修改 for(int i=1;i<=lay;i++){ for(int j=1;j<=1+(i-1)*2;j++){ System.out.print("*"); } System.out.println();//没打印完一层就换行 }
System.out.println("------------------------分割线------------------------------------------------"); //上述打印出来的其实已经是一个完整的金字塔形了 不过只是缺少空格 继续加入空格 往右边挤一下 /* * *** ***** ******* */ //空格的规律:1->3 2->2 3->1 4->0 呈现递减效果 int lay1=10; for(int i=1;i<=lay1;i++){ for(int k=1;k<=lay1-i;k++){//打印的空格是跟随层数的变化而变化的 System.out.print(" ");//打印空格 } for(int j=1;j<=1+(i-1)*2;j++){//打印的*呈现等差数列 System.out.print("*"); } System.out.println();//没打完一层*就换行 } //在上面的基础上打出一个镂空的金子塔形 /* * * * * * ******* */ /*分析: 1、首先是在前面的基础上的内层循环打*的部分 要做判断 2、如果是第一层和最后一层则全部打出* 3、中间层判断是打第一个*和最后一个* 其余的都打空格 ---如果去考虑空格会麻烦一些 */ System.out.println("------------------------分割线------------------------------------------------"); int lay3=4; for(int i=1;i<=lay3;i++){ for(int k=1;k<=lay3-i;k++){ System.out.print(" "); } for(int j=1;j<=1+(i-1)*2;j++){ if(i==1||i==lay3){//如果层数是第一层或者最后一层则 打出* System.out.print("*"); }
else{//中间层的情况 继续分类 if(j==1||j==1+(i-1)*2){//表示中间层的第一个*和最后一个* 应该要打印 System.out.print("*"); } else{ System.out.print(" ");//否则打印空格 } } } System.out.println();//内层循环打印*结束后换行 } } }
继续在上面的基础上进行 加工打印出一个镂空的菱形
class Test { public static void main(String[] args) { //打印镂空的菱形 /* * * * * * * * * * * * * */ //分析:镂空的菱形由上三角和下三角组成 并且三角形式镂空的 //根据前面打印的镂空三角形的基础上去组个---告诉我们一个道理遇到稍微复杂的问题:应该善于拆解成一个一个的组件然后分别测试后进行组合 //先打印一个镂空的三角形 /* * * * * * ******* */ int lay=4; for(int i=1;i<=lay;i++){//1、外层循环控制层数 for(int k=1;k<=lay-i;k++){//3、打印空格 System.out.print(" "); } for(int j=1;j<=1+(i-1)*2;j++){//2、利用等差数列的原理,an=a1+(n-1)*d 每次等打印最多的*就是an项的值 if(i==1){//4、首层打*最后一层不打* System.out.print("*"); } else{ if(j==1||j==1+(i-1)*2){//5、中间层有*的部分是第一个和最后一个 System.out.print("*"); } else{ System.out.print(" ");//6、中间层其余部分全是空格 } } } System.out.println(); } //System.out.println("------------------------分割线------------------------------------------------"); //上面的部分打印好了 继续打印下面的部分 /* ******* * * * * * */ //惯例:先打印出实心的三角形 /* ******* ***** *** * */ //分析:1->7 2->5 3-3 4->1 int lay1=4; for(int i=lay1;i>=1;i--){//第一层实际上是最后一次 所以反转 for(int k=0;k<lay1-i;k++){//层数和空格对应关系的变化:4->0 3->1 2->2 1->3 System.out.print(" "); } for(int j=2*i-1;j>=1;j--){//第一层的*数 建立和层数的关系 if(i==1){//只有最后一层才打1个* System.out.print("*"); } else{ if(j==2*i-1||j==1){ System.out.print("*"); } else{ System.out.print(" "); } } } System.out.println(); } } }