Java 空心金字塔 + 空心菱形
程序员文章站
2024-03-12 22:33:38
...
Java 空心金字塔 + 空心菱形
推荐: 【零基础 快速学Java】韩顺平 零基础30天学会Java.
空心金字塔
思路:化繁为简
- 打印矩形
- 三角形
- 空格+三角形
- 空心金字塔
1. 打印矩形
int row = 5;
for (int i = 1; i <= row; i++) {
System.out.println("*****");
}
效果:
*****
*****
*****
*****
*****
2. 三角形
int row = 5;
for (int i = 1; i <= row; i++) {
// 2. 三角形
for (int j = 1 ; j <= i; j++) {
System.out.print("*");
}
// 每打印i个*就换行
System.out.println();
}
效果:
*
**
***
****
*****
3. 空格+三角形
int row = 5;
for (int i = 1; i <= row; i++) {
// 3. 空格
for (int k = row - i; k >= 1 ; k--) {
System.out.print(" ");
}
// 2. 三角形
for (int j = 1 ; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
效果:
*
***
*****
*******
*********
4. 空心金字塔
int row = 5;
for (int i = 1; i <= row; i++) {
// 3. 空格+三角形
for (int k = row - i; k >= 1 ; k--) {
System.out.print(" ");
}
// 2. 三角形
for (int j = 1 ; j <= 2 * i - 1; j++) {
if (j == 1 || j == (2 * i - 1) || i == row){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
效果:
*
* *
* *
* *
*********
菱形
思路:效果上相当于把上面的空心金字塔复制后反转就可以,也就是说空心菱形可以分为上下两部分
1. 上半部分
- 把空心金字塔最后一行中间的"*"替换成空格
int row = 5;
for (int i = 1; i <= row; i++) {
// 3. 空格+三角形
for (int k = row - i; k >= 1 ; k--) {
System.out.print(" ");
}
// 2. 三角形
for (int j = 1 ; j <= 2 * i - 1; j++) {
if (j == 1 || j == (2 * i - 1) ){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
效果:
*
* *
* *
* *
* *
2. 下半部分
思路:把上半部分的第一行作为最后一行输出,以此类推,上半部分的最后一行为下半部分的第一行,但是这样就不是不是一个菱形的效果了,所以下半部分的总行数要比下半部分少一行,即上半部分的倒数第二行为下半部分的第一行
- 将上半部分反转
for (int i = 1; i <= row - 1 ; i++) {
// 3. 空格+倒三角形
for (int k = i; k >= 1 ; k--) {
System.out.print(" ");
}
// 2. 倒三角形
for (int j = 2 * (row - i) - 1 ; j >= 1; j--) {
if (j == 2 * (row - i) - 1 || j == 1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
效果:
* *
* *
* *
*
程序按顺序执行
合并后为:
int row = 5;
for (int i = 1; i <= row; i++) {
// 3. 空格+三角形
for (int k = row - i; k >= 1 ; k--) {
System.out.print(" ");
}
// 2. 三角形
for (int j = 1 ; j <= 2 * i - 1; j++) {
if (j == 1 || j == (2 * i - 1) ){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
for (int i = 1; i <= row - 1 ; i++) {
// 4. 空格+三角形
for (int k = i; k >= 1 ; k--) {
System.out.print(" ");
}
// 3. 倒三角形
for (int j = 2 * (row - i) - 1 ; j >= 1; j--) {
if (j == 2 * (row - i) - 1 || j == 1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
效果:
*
* *
* *
* *
* *
* *
* *
* *
*