Java 空心菱形、空心金字塔

练习一:金字塔的一半

/*
	第一次:i = 1 -> 执行内层 for 循环,j <= i : 1 <= 1,打印一个 *
	第二次:i = 2 -> 执行内层 for 循环,j <= i : 1 <= 2,打印两个 *
	第三次:i = 3 -> 执行内层 for 循环,j <= i : 1 <= 3,打印三个 *
	第四次:i = 4 -> 执行内层 for 循环,j <= i : 1 <= 4,打印四个 *
	第五次:i = 5 -> 执行内层 for 循环,j <= i : 1 <= 5,打印五个 *
*/
for(int i = 1; i <= 5;i++){
	for(int j = 1; j <= i;j++){
		System.out.print("*");
	}
	System.out.print("\n");
}

效果图:
在这里插入图片描述

练习二:完整金字塔(优化前)

for(int i = 1; i <= 5;i++){
	// 空格
	for(int k = 5; k > i;k--){
		System.out.print(" ");
	}
	// 半个金字塔(左半)
	for(int j = 1; j <= i;j++){
		System.out.print("*");
	}
	// 半个金字塔(右半)
	for(int l = 2; l <= i;l++){
		System.out.print("*");
	}
	System.out.print("\n");
}

效果图:
在这里插入图片描述

练习二:完整金字塔(优化后)

这里我们可以找规律

    *		第一行一个 *,四个空格
   ***		第二行三个 *,三个空格
  *****		第三行五个 *,两个空格
 *******	第四行七个 *,一个空格
*********	第五行九个 *,没有空格
可以看出上述符合等差数列
等差数列公式:an = a1 + (n - 1)
看上面可以知道 a1 = 1,d = 2,将 a1 和 d 带入公式可以得出 an = 2n-1

下面我们用这个公式对程序进行优化

// i 表示层数
for(int i = 1; i <= 5;i++){
	// 空格公式:总层数 - 当前层数
	for(int j = 1; j <= 5 - i;j++){
		System.out.print(" ");
	}
	// 金字塔
	for(int k = 1;k <= 2 * i - 1;k++){
		System.out.print("*");
	}
	System.out.print("\n");
}

练习三:空心金字塔(优化前)

for(int i = 1; i <= 5;i++){
// 空格
for(int k = 5; k > i;k--){
	System.out.print(" ");
}
// 金字塔左边
System.out.print("*");
// 金字塔中间
for(int j = 2; j <= i;j++){
	// if 是因为要判断是不是到达底部,用来封底
	if( i == 5){
		System.out.print("*");
	} else {
		System.out.print(" ");
	}
}
for(int j = 3; j <= i;j++){
	// if 是因为要判断是不是到达底部,用来封底
	if( i == 5){
		System.out.print("*");
	} else {
		System.out.print(" ");
	}
}
// 金字塔右边
if(i != 1){
	System.out.print("*");
}
System.out.print("\n");
}

效果图:
在这里插入图片描述

练习三:空心金字塔(优化后)

int t = 20;
for(int i = 1; i <= t;i++){
	for(int j = 1; j <= t - i;j++){
		System.out.print(" ");
	}
	for(int k = 1;k <= 2 * i - 1;k++){
		if( k == 1 || k == 2 * i - 1 || i == t){
			System.out.print("*");
		} else {
			System.out.print(" ");					
		}
	}
	System.out.println();
}

效果图:
在这里插入图片描述

练习四:菱形(优化前)

// 菱形上
for(int i = 1; i <= 4;i++){
	// 空格
	for(int k = 1; k <= 4 - i;k++){
		System.out.print(" ");
	}
	// *
	for(int j = 1; j <= 2 * i - 1;j++ ){
		System.out.print("*");
	}
	System.out.println();
}
// 菱形下
for(int i = 1; i <= 3;i++){
	// 空格
	for(int k = 1; k <= i;k++){
		System.out.print(" ");
	}
	// *
	for(int j = 1; j <= -2 * i + 7;j++ ){
		System.out.print("*");
	}
	System.out.println();
}

效果图:
在这里插入图片描述

练习四:菱形(优化后)

int size = 4;
// 首先定义行数, +(反) 和 -(正)
for(int i = -size;i <= size;i++){
	// 定义星号的个数
	int stars = size - Math.abs(i);
	// 打印空格,3、2、1、0、1、2、3
	for(int j = 0; j < Math.abs(i);j++){
		System.out.print(" ");
	}
	// 打印星号,1、3、5、7、9、7、5、3、1
	for(int k = 0;k < stars * 2 - 1;k++){
		System.out.print("*");
	}
	System.out.println();
}

效果图:
在这里插入图片描述

练习五:空心菱形

int size = 4;
// 首先定义行数, +(反) 和 -(正)
for(int i = -size;i <= size;i++){
	// 定义星号的个数
	int stars = size - Math.abs(i);
	// 打印空格,3、2、1、0、1、2、3
	for(int j = 0; j < Math.abs(i);j++){
		System.out.print(" ");
	}
	// 打印星号,1、3、5、7、9、7、5、3、1
	for(int k = 0;k < stars * 2 - 1;k++){
		// (stars * 2 -1) -1 是本行的最后
		if(k == 0 || k == (stars * 2 -1) -1 ){
			System.out.print("*");
		} else {
			System.out.print(" ");
		}
	}
	System.out.println();
}

效果图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值