您的位置:首页 > 其它

for循环输出空心的菱形

2018-01-13 16:16 211 查看

一.实例说明:

本实例在输出菱形的基础上加大了难度,输出空心的菱形图案。在等级考试与公司面试时也出现过类似题目,实际目的在于掌握for循环的嵌套使用。

二.设计过程:

像这种复杂问题我们也可以先从简单处着手,如果要打印空心菱形,可以沿着“金字塔——>空心金字塔——>空心菱形”这一思路进行。实现如下:

(一)金字塔

1.需求:在控制台打印一个由5行“*”组成的金字塔

2.分析:

首先行数5行是确定的,列数是不确定的。

第一行:       i = 0;       i < 5;       j = 0;       j < 4;       4个空白

                                                 k = 0;      k < 1;      1个星号

第二行:       i = 1;       i < 5;       j = 0;       j < 3;       3个空白

                                                 k = 0;      k < 3;      3个星号

第三行:       i = 2;       i < 5;       j = 0;       j < 2;       2个空白

                                                 k = 0;      k < 5;       5个星号

                                        ……

由以上分析可知,每行空白的个数为 j < (5-1-i),每行星号的个数为 k < 2*i+1。

3.实例:

class Demo1{
public static void main(String[] args){
for(int i = 0;i < 5;i++){ //i控制金字塔行数
for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
System.out.print(" ");
}
for(int k = 0;k < (2*i+1);k++){ //k控制要打印的"*"的个数
System.out.print("*");
}
System.out.println();
}
}
}


4.运行结果如下图所示:



(二)镂空金字塔

1.需求:在控制台上打印镂空金字塔。

2.分析:

镂空金字塔与完整金字塔比较,可以看出除了金字塔的各个边上是"*"号外,金字塔的内部全是用空格代替了“*”号。因此可以在打印每行的"*"号时判断是不是第一个“*”或者最后一个"*",如果不是则用空格替换掉。

3.实例:

class Demo2{
public static void main(String[] args){
for(int i = 0;i < 5;i++){ //i控制金字塔行数
for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
System.out.print(" ");
}
for(int k = 0;k < (2*i+1);k++){ //k控制要打印的"*"的个数
if(i == 0||i==4){//如果是第一行或最后一行则将"*"全部打印
System.out.print("*");
}else if(k == 0||k == (2*i)){//如果要打印的"*"是第一个或最后一个则打印出来
System.out.print("*");
}else{//如果要打印的"*"不是第一个或最后一个则打印空格
System.out.print(" ");
}
}
System.out.println();
}
}
}


4.运行结果如下图所示:



(三)空心菱形

1.需求:在控制台上打印出空心菱形。

2.分析:

空心菱形可以看作两部分组成:上半部分和下半部分。而这两部分均属于空心金字塔类型。

3.实例:

class Demo3{
public static void main(String[] args){
for(int i = 0;i < 5;i++){ //i表示空心菱形上半部分行数;类似于金字塔行数
for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
System.out.print(" ");
}
for(int k = 0;k < (2*i+1);k++){ //k控制要打印的"*"的个数
if(i == 0){//如果是第一行则将"*"全部打印
System.out.print("*");
}else if(k == 0||k == (2*i)){//如果要打印的"*"是第一个或最后一个则 //打印出来
System.out.print("*");
}else{//如果要打印的"*"不是第一个或最后一个则打印空格
System.out.print(" ");
}
}
System.out.println();
}//以上打印的是空心菱形的上半部分。
for(int i = 0;i < 4;i++){ //空心菱形的下半部分的行数比上半部分少一行;比如上 //半部分是5行,下半部分为4行才能构成菱形
for(int j = 0;j < (i+1);j++){//j控制每行"*"前面的空格数
System.out.print(" ");
}
for(int k = 0;k < 2*(4-i)-1;k++){ //k控制要打印的"*"的个数
if(i == 3){//如果是最后一行则将"*"全部打印
System.out.print("*");
}else if(k == 0||k == 2*(3-i)){//如果要打印的"*"是第一个或最后一个 //则打印出来
System.out.print("*");
}else{//如果要打印的"*"不是第一个或最后一个则打印空格
System.out.print(" ");
}
}
System.out.println();
}
}
}


4.运行结果如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息